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);
小数记住它的小数位数:
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);