Math.Round没有保持尾随零
我需要将所有值四舍五入到小数点后两位。 因此1.401应该舍入到1.40,但Math.Round(value, 2)
到1.4。
如何强制尾随零?
1.4
与1.40
相同 – 您只想以不同方式显示它。 调用ToString
时使用格式字符串 – 类似于value.ToString("0.00")
1.4 == 1.40
你唯一需要尾随0的时候就是当你显示数字时..将它格式化为字符串。
.ToString("N2");
尾随零更多的是格式而不是值问题,因此请使用
foo.ToString("0.00")
我知道这是一个老问题,但可能对某人有帮助!
我正在使用ac#xml类来填充然后序列化为xml。 其中一个值是双倍的。 如果我为该值分配一个’7’,当我实际需要’7.00’时,这会被序列化为’7’。 最简单的方法就是:
foo = doubleValue + 0.00M
这使得值7.00而不是7.认为这比做一个ToString然后解析它更好。
尾随零只是一个演示文稿。 数学方面, 1.40
和1.4
是等价的。
使用格式代替将其显示为2位小数:
String.Format("{0:0.00}", 1.4); or yourNumber.ToString("0.00");
它是一个数字(double?),所以它没有尾随零 – 你必须使它成为文本并强制尾随零。
它与您使用小数还是双精度有关。
虽然在内部(从源代码中看起来), Math.Round()
甚至在double上保留尾随零,但它在内存中保存为double的事实会导致自动删除所有尾随零
因此,如果你确实想要拖尾零,你可以使用字符串显示函数来格式化它,就像其他人已经回答一样,或者确保将原始值作为小数传递(导致在内部使用Decimal.Math.Round
,它只会处理带小数),并确保不将结果转换为double,也不要将其保存在double变量中。
类似地,如果你有一个小数,并且你不想要尾随零,只需将其转换为double(你可以将输入转换为Math.Round
或结果,只要在它的某个地方,它就无关紧要了)变得双倍)。