【问题标题】:StringFormat Double without roundingStringFormat Double 不四舍五入
【发布时间】:2010-05-12 15:14:12
【问题描述】:
double d = toDateTime.SelectedDateTime.Subtract(
              servicefromDateTime.SelectedDateTime).TotalHours;             
string s = String.Format("{0:0}",d); 

但是 String.Format 将值四舍五入:如果 d 为 22.91,则 String.Format 给出的四舍五入结果为 23。我不想四舍五入。例如,如果 d 是 22.1222222,那么我想要 22。如果 d 是 22.999999,那么我想要 22。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    你可以使用 Math.Truncate

    double d = toDateTime.SelectedDateTime.Subtract(servicefromDateTime.SelectedDateTime).TotalHours; 
    
    string s = String.Format("{0:0}", Math.Truncate(d));
    

    【讨论】:

    • 我不能说 OP 想要哪种行为 - 但 Math.Floor 或 Math.Truncate 之一确实会做他想做的事。
    【解决方案2】:

    如果您将双精度转换为 int/long,它将截断任何小数部分,从而有效地为您提供双精度的“下限”或舍入。

    【讨论】:

      【解决方案3】:

      那你需要Math.Floor

      double d = toDateTime.SelectedDateTime.Subtract(servicefromDateTime.SelectedDateTime).TotalHours;
      
      string s = String.Format("{0:0}",Math.Floor(d)); 
      

      【讨论】:

      • Floor 不适用于负数。 Math.Floor(-7.1) 返回 -8。
      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 2022-12-12
      • 2021-11-30
      • 2023-01-12
      • 2012-08-04
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多