当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。

我是否为此使用.ToString()的变体?


当前回答

我知道这是一个古老的问题,但我惊讶地发现似乎没有人发布这样的答案;

没有使用银行家舍入将值保留为小数。

这是我会使用的:

decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx

其他回答

数学舍入方法(十进制,Int32)

如果您只是需要显示,请使用string.Format

String.Format("{0:0.00}", 123.4567m);      // "123.46"

http://www.csharp-examples.net/string-format-double/

“m”是十进制后缀。关于十进制后缀:

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

最适用的解决方案是

decimalVar.ToString("#.##");

如果您只需要保留2位小数(即切掉所有剩余的小数):

decimal val = 3.14789m;
decimal result = Math.Floor(val * 100) / 100; // result = 3.14

如果只需要保留3位小数:

decimal val = 3.14789m;
decimal result = Math.Floor(val * 1000) / 1000; // result = 3.147

您可以使用system.globalization以任何所需格式格式化数字。

例如:

system.globalization.cultureinfo ci = new system.globalization.cultureinfo("en-ca");

如果您有一个小数d=1.2300000,并且需要将其修剪为2位小数,则可以像这样打印d.Tostring(“F2”,ci);其中F2是字符串格式,小数点后2位,ci是区域设置或文化信息。

有关详细信息,请查看此链接http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx