当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.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
其他回答
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。
decimalVar.ToString("#.##"); // returns ".5" when decimalVar == 0.5m
or
decimalVar.ToString("0.##"); // returns "0.5" when decimalVar == 0.5m
or
decimalVar.ToString("0.00"); // returns "0.50" when decimalVar == 0.5m
如果您希望使用逗号和小数点(但不使用货币符号)格式化,例如3456789.12。。。
decimalVar.ToString("n2");
所有这些都没有达到我所需要的效果,即强制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"