你实际上不在中点。MidpointRounding.ToEven
表示如果您有数字99.965,即 99.96500000[等],那么您将获得 99.96。由于您传递给 Math.Round 的数字高于此中点,因此它正在向上取整。
如果您希望您的数字向下舍入到 99.96,请执行以下操作:
// this will round 99.965 down to 99.96
return Math.Round(Math.Truncate(99.96535789*1000)/1000, 2, MidpointRounding.ToEven);
嘿,这是一个方便的小功能,可以在一般情况下执行上述操作:
// This is meant to be cute;
// I take no responsibility for floating-point errors.
double TruncateThenRound(double value, int digits, MidpointRounding mode) {
double multiplier = Math.Pow(10.0, digits + 1);
double truncated = Math.Truncate(value * multiplier) / multiplier;
return Math.Round(truncated, digits, mode);
}