当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当显示当前使用.ToString()的十进制值时,它精确到15位小数,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。
我是否为此使用.ToString()的变体?
当前回答
如果您希望使用逗号和小数点(但不使用货币符号)格式化,例如3456789.12。。。
decimalVar.ToString("n2");
其他回答
我知道这是一个古老的问题,但我惊讶地发现似乎没有人发布这样的答案;
没有使用银行家舍入将值保留为小数。
这是我会使用的:
decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
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
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”),需要将其舍入并保持为十进制。
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。
如果您只需要保留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