C#小数点记忆精度:如何调整

C# decimal remembers precision: how to adjust

小数记住它的小数位数:

Console.WriteLine(1.1m); // 1.1
Console.WriteLine(1.10m); // 1.10

我处于无法控制序列化的情况(因此我无法使用更明确格式的stringify),但要求输出恰好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() 更简洁的方法吗?

为了ensure/increase "precision"小数点后最多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);