Decimal会记住它的小数位数:
Console.WriteLine(1.1m); // 1.1
Console.WriteLine(1.10m); // 1.10
我处于不控制序列化的情况(所以我不能使用更明确格式化的字符串化),但是需要输出正好2个小数位。
所以,我试图将任何小数强制为相同的值但是有2个小数位。
var d = Decimal.Round(1.1m, 2, MidpointRounding.AwayFromZero); // Try to increase precision
Console.WriteLine(d); // Is 1.1, but I need 1.10
可以使用ToString("F")
然后Decimal.Parse()
来实现。但有没有比通过ToString()
更简洁的方式?
答案 0 :(得分:2)
为了确保/提高"精度"小数点后最多2
位,您可以添加0.00m
:
1.1m + 0.00m == 1.10m
同样的想法概括为:
private static decimal FormatOut(decimal value, int afterDecimal) {
// rounding up and adding 0.00…0 - afterDecimal zeroes
return Decimal.Round(value, afterDecimal, MidpointRounding.AwayFromZero) +
new decimal(0, 0, 0, false, (byte)afterDecimal);
}
...
decimal result = FormatOut(1.1m, 2);
// 1.10
Console.Write(result);