当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当前回答
decimalVar.ToString("F");
这将:
舍入到小数点后2位,例如23.456→ 23.46确保总是2位小数,例如23→ 23.00; 12.5→ 12.50
非常适合显示货币。
查看ToString(“F”)的文档(感谢Jon Schneider)。
其他回答
var arr = new List<int>() { -4, 3, -9, 0, 4, 1 };
decimal result1 = arr.Where(p => p > 0).Count();
var responseResult1 = result1 / arr.Count();
decimal result2 = arr.Where(p => p < 0).Count();
var responseResult2 = result2 / arr.Count();
decimal result3 = arr.Where(p => p == 0).Count();
var responseResult3 = result3 / arr.Count();
Console.WriteLine(String.Format("{0:#,0.000}", responseResult1));
Console.WriteLine(String.Format("{0:#,0.0000}", responseResult2));
Console.WriteLine(String.Format("{0:#,0.00000}", responseResult3));
你可以放任意多的0。
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
此链接详细说明了如何处理问题,以及如果您想了解更多信息,可以做什么。为了简单起见,您想做的是
double whateverYouWantToChange = whateverYouWantToChange.ToString("F2");
如果你想要一种货币,你可以通过键入“C2”而不是“F2”来简化
如果您希望使用逗号和小数点(但不使用货币符号)格式化,例如3456789.12。。。
decimalVar.ToString("n2");
如果值为0,则很少需要空字符串。
decimal test = 5.00;
test.ToString("0.00"); //"5.00"
decimal? test2 = 5.05;
test2.ToString("0.00"); //"5.05"
decimal? test3 = 0;
test3.ToString("0.00"); //"0.00"
排名最高的答案是错误的,浪费了(大多数)人10分钟的时间。
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”),需要将其舍入并保持为十进制。