2012-09-06 140 views
7

我需要所有值四舍五入到小数点后两位。所以1.401应该舍入到1.40,但Math.Round(value, 2)舍入到1.4。Math.Round不保留结尾零

如何强制结尾零?

回答

17

1.4相同1.40 - 你只是想以不同的方式显示。调用ToString当使用格式字符串 - 像value.ToString("0.00")

+0

正确。我只是想以不同的方式显示它。谢谢! – Blade3

12

1.4 == 1.40你唯一需要结尾0的时间是当你显示数字..i.e。将其格式化为字符串。

.ToString("N2"); 
5

尾随零更是一个格式比的数值问题,所以使用

foo.ToString("0.00") 
2

尾随零只是一个演示。数学方面,1.401.4是等同的。

使用的格式,而不是与2位小数目前它:

String.Format("{0:0.00}", 1.4); 

or 

yourNumber.ToString("0.00"); 
1

它是一个数字,所以它没有一个尾随零 - 你必须让它文字和力(双?)尾随零。

2

我知道这是一个老问题,但可能会帮助别人!

我正在使用c#xml类来填充,然后序列化为xml。其中一个值是双。如果我给这个值赋值'7',当我真的需要'7.00'时,这个值被序列化为'7'。这一轮最简单的方法是只是做:

foo = doubleValue + 0.00M 

这让而不是仅仅7.认为这是更好然后做一个ToString,然后解析回值7.00。

0

它与您使用小数还是双倍有关。

虽然内部(因为它出现在Source CodeMath.Round()保留甚至上双,还在于它保存为双内存自动地导致删除所有尾随零

所以,如果你的尾随零要想拖尾零,你可以使用字符串显示函数来设置其他人已经回答的格式,或者确保以原始值的小数形式传递(导致内部使用Decimal.Math.Round这将只处理小数),并确保不要将结果转换为double,也不要将其保存在双变量中。

同样,如果你有一个小数,并且你不想跟随零,只需将它转换为double(你可以将输入转换为Math.Round或结果,只要在某处它正在成为一个双)。