2012-08-13 44 views
3

我有一个价格的文本框,我想得到一个小数点后两位小数,不管原始字符串是一个十进制还是整数。例如:如何将C#中的文本框中的数字舍入为2位小数?

input = 12 --> output = 12.00 
input = 12.1 --> output = 12.10 
input = 12.123 --> output = 12.12 
+1

要知道,公认的答案给你一个字符串,它可能并不总是你想要的。例如,'(12.125m).ToString(“N”)''是12.13“',并且'(12.135m).ToString(”N“)''是12.14”'('AwayFromZero'四舍五入)。但是'Math.Round(12.125m,2);'是'12.12',而'Math.Round(12.135m,2);'是'12.14'。小心! – hmqcnoesy 2012-08-13 12:45:10

回答

3

使用这种方法decimal.ToString("N");

5

可以使用.ToString()重载接受一个字符串格式:

var roundedInput = input.ToString("0.00"); 

。当然,这会导致一个字符串类型。

要简单的圆形,可以使用Math.Round

var roundedInput = Math.Round(input, 2); 

你应该知道,在默认情况下,Math.Round使用“银行家舍入”的方法,你可能不希望。在这种情况下,您可能需要使用采用四舍五入类型枚举超载:

var roundedInput = Math.Round(input, 2, MidpointRounding.AwayFromZero); 

看到,这里使用MidpointRounding的方法重载文档:http://msdn.microsoft.com/en-us/library/ms131275.aspx

另外要注意的是,默认四舍五入方法Math.Rounddecimal.ToString()中使用的默认舍入方法不同。例如:

(12.125m).ToString("N"); // "12.13" 
(12.135m).ToString("N"); // "12.14" 
Math.Round(12.125m, 2); // 12.12 
Math.Round(12.135m, 2); // 12.14 

根据您的情况,使用错误的技术可能会非常糟糕!

3
// just two decimal places 
String.Format("{0:0.00}", 123.4567);  // "123.46" 
String.Format("{0:0.00}", 123.4);   // "123.40" 
String.Format("{0:0.00}", 123.0);   // "123.00" 
0

尝试

Input.Text = Math.Round(z, # Places).ToString(); 
+0

这将返回四舍五入的答案,但未按要求完成格式设置 – SeanC 2012-08-13 14:03:38