我的最后一个目标始终是四舍五入到最接近的偶数整数。
例如,我想要的数字1122.5196
作为结果1122
。我已经尝试过以下选项:
Math.Round(1122.5196d, 0, MidpointRounding.ToEven); // result 1123
Math.Round(1122.5196d, 0, MidpointRounding.AwayFromZero); // result 1123
最后,我想要得到的始终是最接近的偶数整数。例如:
1122.51 --> 1122
1122.9 --> 1122
(因为最近的int是1123
但它是奇数,并且1122
比1124
更近)1123.0 --> 1124
(下一个偶数,下一个更高的偶数)我只使用正数。
等等。
有一些方法可以做到这一点,或者我应该实现自己的方法?
最佳答案
尝试以下操作(让Math.Round
与MidpointRounding.AwayFromZero
一起使用以获得“下一个偶数”但已缩放-2
系数):
double source = 1123.0;
// 1124.0
double result = Math.Round(source / 2, MidpointRounding.AwayFromZero) * 2;
演示:
double[] tests = new double[] {
1.0,
1123.1,
1123.0,
1122.9,
1122.1,
1122.0,
1121.5,
1121.0,
};
string report = string.Join(Environment.NewLine, tests
.Select(item => $"{item,6:F1} -> {Math.Round(item / 2, MidpointRounding.AwayFromZero) * 2}"));
Console.Write(report);
结果:
1.0 -> 2 // In case of tie, next even value
1123.1 -> 1124
1123.0 -> 1124 // In case of tie, next even value
1122.9 -> 1122
1122.1 -> 1122
1122.0 -> 1122
1121.5 -> 1122
1121.0 -> 1122 // In case of tie, next even value