C#decimal记住精度:如何调整

时间:2017-05-09 12:03:46

标签: c# decimal precision digits

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()更简洁的方式?

1 个答案:

答案 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);