当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当前回答
Double Amount = 0;
string amount;
amount=string.Format("{0:F2}", Decimal.Parse(Amount.ToString()));
其他回答
我知道这是一个古老的问题,但我惊讶地发现似乎没有人发布这样的答案;
没有使用银行家舍入将值保留为小数。
这是我会使用的:
decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
Double Amount = 0;
string amount;
amount=string.Format("{0:F2}", Decimal.Parse(Amount.ToString()));
您可以使用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
所有这些都没有达到我所需要的效果,即强制2 d.p.并舍入为0.005-0.01
强制2 d.p.需要将精度提高2 d.p.,以确保至少有2 d.p。
然后四舍五入,以确保我们的d.p不超过2。
Math.Round(exactResult * 1.00m, 2, MidpointRounding.AwayFromZero)
6.665m.ToString() -> "6.67"
6.6m.ToString() -> "6.60"
Decimal有一个非常重要的特点,这一点并不明显:
十进制“知道”它有多少个小数点,这取决于它来自哪里
以下可能是意外的:
Decimal.Parse("25").ToString() => "25"
Decimal.Parse("25.").ToString() => "25"
Decimal.Parse("25.0").ToString() => "25.0"
Decimal.Parse("25.0000").ToString() => "25.0000"
25m.ToString() => "25"
25.000m.ToString() => "25.000"
对Double执行相同的操作将导致上述所有示例的小数位数为零(“25”)。
如果你想要小数点到小数点后2位,那么可能性很高,这是因为它是货币,在这种情况下,95%的时间都可以:
Decimal.Parse("25.0").ToString("c") => "$25.00"
或者在XAML中使用{Binding Price,StringFormat=c}
我遇到过一个需要十进制作为十进制的例子,那就是将XML发送到Amazon的Web服务时。服务正在抱怨,因为Decimal值(最初来自SQL Server)被发送为25.1200并被拒绝(25.12是预期格式)。
我所需要做的就是十进制。无论值的来源如何,用2个小数位舍入(…)来解决问题。
// generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValue是Decimal类型,所以我不能只做ToString(“N2”),需要将其舍入并保持为十进制。