3

我有一个价格文本框,我想得到一个带有 2 个小数的十进制值,无论原始字符串已经是小数还是整数。例如:

input = 12 --> output = 12.00
input = 12.1 --> output = 12.10
input = 12.123 --> output = 12.12
4

4 回答 4

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);

请参阅此处使用的方法重载文档:http MidpointRounding: //msdn.microsoft.com/en-us/library/ms131275.aspx

另请注意, 的默认舍入方法与Math.Round中使用的默认舍入方法不同decimal.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

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

于 2012-08-13T10:58:26.450 回答
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"
于 2012-08-13T10:58:41.627 回答
3

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

于 2012-08-13T10:58:57.353 回答
0

尝试

Input.Text = Math.Round(z, # Places).ToString();
于 2012-08-13T11:01:03.497 回答