使用decimal
时,为什么舍入行为总是相同的?
无论我是否使用MidpointRounding.AwayFromZero
,它总是给出1.04
。在第一种情况下,输出不应该是1.03
吗?
Console.WriteLine(decimal.Round(1.035m, 2));
Console.WriteLine(decimal.Round(1.035m, 2, MidpointRounding.AwayFromZero));
答案 0 :(得分:1)
此方法[
Round(decimal d, int decimals)
等效于使用模式参数Round(Decimal, Int32, MidpointRounding)
调用MidpointRounding.ToEven
方法。当d恰好位于两个四舍五入值之间的一半时,结果是四舍五入后的值,该值在最右端的小数位具有偶数位。例如,当四舍五入到两位小数时,值2.345变为2.34,值2.355变为2.36。
因此,将1.035
舍入为偶数时,由于4是偶数而3不是,所以它变成1.04
。
答案 1 :(得分:1)
默认的舍入方法为MidpointRounding.ToEven
,因此在选择是舍入为1.03
还是1.04
时,它会选择一个以偶数结尾的数字{{1} }。
答案 2 :(得分:0)
MSDN说:
public static decimal Round(
decimal d,
int decimals
)
decimals:小数位数:0到28之间的一个值,用于指定 四舍五入。
您想在2个位置取整,它必须为1.04
答案 3 :(得分:0)
对我来说,这是四舍五入时的预期行为。
例如:
1.035 => 1.040产生两位小数1.04
1.033 => 1.030产生两位小数1.03
答案 4 :(得分:0)
默认舍入不是四舍五入吗?在这种情况下,5会被四舍五入并结转...
默认情况下,Round方法使用四舍五入到最接近的约定。下表列出了Round方法的重载以及各自使用的舍入约定。 https://docs.microsoft.com/en-us/dotnet/api/system.math.round?view=netframework-4.7.2