例如 1.1234 那么结果是1.12

时间:2021-12-26 04:06:06

  C#保存2位小数,.ToString("f2")确实可以,但是如果这个数字原来就小数点后面三位好比1.253,那么转化之后就会酿成1.25.可不成以恰好保存到最后一位不是0的位置?
默认保存2位,如果真的有3位小数,就保存3位,有4位就保存4位。

先说一下ToString("0.00##")中0和#的区别:
  0 代表占位的。如果ToString("0.00") 这样就是保存两位小数,无论小数有几多位或者无小数,功效都是两位小数。例如 1.1234 那么功效是1.12。如果是1.2 那么功效会补零,为1.20。
  # 代表后面的不是零就被保存,如果是0就去失。例如ToString("0.##") 那么1.20的话功效是1.2。


对付场景1的问题,默认有两位就是00,其它的如果大于两位就不是零就保存的话,可以下面这样写:

double dd = 1.2530; string ret = dd.ToString("0.00####"); // 1.253

场景2:

  按照国际惯例,,有时候我们需要对超过的位数“四舍五入”。用C# 实现保存两位小数的要领有很多,常用的总结如下:

1、Math.Round(0.333333,2);//凭据四舍五入的国际标准
2、double dbdata=0.335333; string str1=String.Format("{0:F}",dbdata);//默认为保存两位
3、float i=0.333333; int j=(int)(i * 100); i = j/100;
4、decimal.Round(decimal.Parse("0.3333333"),2)
5、private System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();

  float test=0.333333f;

  nfi.NumberDecimalDigits=2;

  string result=test.ToString("N", nfi);


6、string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString());
7、Convert.ToDecimal("0.33333333").ToString("0.00");