舍入十进制数最多两位小数

时间:2015-03-04 05:24:59

标签: c# asp.net vb.net rounding

我正在尝试将十进制数舍入到小数点后两位,这是完美的。 我正在做如下:

Math.Round(Amount, 2)

所以,如果我的金额为40000.4567,我会得到40000.46这正是我想要的。 现在问题是我有像40000.0000这样的十进制数字,当我绕过它时,结果是40000,而我真正想要的是40000.00。所以round将始终忽略尾随零。

要解决这个问题,我可以选择将其转换为字符串并使用格式,但我不想这样做,因为效率低下,我相信必须有一些方法可以做得更好。

我也试过像

这样的东西
Decimal.Round(Amount, 2)

现在有一种方法可以检查数字是否包含小数部分中的任何内容并相应地使用round函数,但这是非常糟糕的方法。 我也不能使用truncate,原因很明显这与数量有关。

有什么方法?

4 个答案:

答案 0 :(得分:3)

正在正确舍入,但您无法理解不是格式。没有差异两个值4000040000.00之间,你会遇到与3.1类似的问题。

只需使用格式输出您有两位小数的数字,例如:

Console.WriteLine(String.Format("{0:0.00}", value));

或:

Console.WriteLine(value.ToString("0.00"));

答案 1 :(得分:1)

你混合了两件事 - 舍入和输出格式。为了以您想要的格式输出数字,您可以使用具有所需格式的函数string.Format,例如:

decimal number = 1234.567m;
string.Format("{0:#.00}", number);

您可以阅读有关custom numeric format strings in MSDN

的更多信息

答案 2 :(得分:1)

我认为您正在寻找的是显示两位小数,即使它们为零。你可以使用string.Format(我也将它与Round结合起来):

Console.WriteLine(string.Format("{0:0.00}", Math.Round(Amount, 2));

答案 3 :(得分:0)

用于舍入十进制数,您可以使用

decimal number=200.5555m;
number= Math.Round(number, 2);
string numString= string.Format("{0:0.00}", number);