2013-10-23 126 views
2

例如。Math.Round,保留小数位

Math.Round(2.314, 2) //2.31 
Math.Round(2.301, 2) //2.3 , but I want this as 2.30 
+0

应DUP的类似的问题百名。你应该使用适当的格式来打印数字('2.3'和'2.30'是'float' /'double' /'decimal'的相同值) –

+0

也是这个[限制双精度到小数点后3位](http: /stackoverflow.com/questions/3814190/limiting-double-to-3-decimal-places)解释你现在的问题。 –

回答

8

数字在小数点后没有任何零概念。

你实际上是在问如何将数字转换成字符串额外的零:

(2.301).ToString("0.00") // "2.30" 

更多细节见numeric format strings
特别是,0说明符将从零开始舍去。

+3

我认为OP仍然需要先调用Math.Round,因为ToString将会截断,即'(2.309).ToString(“0.00”)'将变成'2.30'。 – mayabelle

+3

@mayabelle:错了。(尝试它) – SLaks

+0

+1 ...应该由同义词搜索SO ...建立你自己的截断标题:'{“limit”,“keep”,“preserve”,“leave”,“show”} {1在{“float”,“double”,“decimal”,“number”中为{},“1,2,3”,“1,2,3”,用于} {“小数位数”,“小数点后”,“数字”,“数字” “......”“......” –

1

2.3和2.30是一回事。如果你想要字符串 2.30,那么在Math.Round函数上使用.ToString(“F2”)。

1

从代码的角度来看,2.3和2.30是一样的。您可以通过格式化字符串显示尾随零:

string yourString = Math.Round(2.301, 3).ToString("0.00"); 
1

小数仍然存在,你可能只是没有看到,因为当你在看的字符串表示,在默认情况下它会忽略尾随零。你可以通过传递一个格式字符串覆盖此行为ToString()

Console.WriteLine(Math.Round(2.301, 2).ToString("N2")) // 2.30 

不过,当然,如果这只是用于显示目的,你并不真的需要调用Math.Round

Console.WriteLine(2.301.ToString("N2")) // 2.30 

进一步阅读

0

如果使用decimal号码(其文字结束与m,对 “钱”),你得到你以后的行为。 double号码没有像decimal那样有重要零的概念。

Math.Round(2.314m, 2); 
Math.Round(2.301m, 2); 

或者,如果你想改变你怎么看这些数字,你可以使用一个string format

Math.Round(2.314, 2).ToString("N2"); 
Math.Round(2.301, 2).ToString("N2");