我的最后一个目标始终是四舍五入到最接近的偶数整数。

例如,我想要的数字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但它是奇数,并且11221124更近)
  • 1123.0 --> 1124(下一个偶数,下一个更高的偶数)

  • 我只使用正数。

    等等。

    有一些方法可以做到这一点,或者我应该实现自己的方法?

    最佳答案

    尝试以下操作(让Math.RoundMidpointRounding.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
    

    08-26 17:55