即使是双倍的一半

5 java rounding

如果可能的话,我需要舍入到最接近的0.5.

10.4999 = 10.5

这是快速代码:

import java.text.DecimalFormat;
import java.math.RoundingMode;

public class DecimalFormat  
{  
   public static void main(String[] args)  
   {  
      DecimalFormat dFormat = new DecimalFormat("#.0");
      dFormat.setRoundingMode(RoundingMode.HALF_EVEN);

      final double test = 10.4999;

      System.out.println("Format: " + dFormat.format(test));
   }  
}  
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为6.10000 ...轮到6.1等...需要它舍入到6.0

感谢您的任何反馈.

Rob*_*tts 12

而不是尝试舍入到最接近的0.5,加倍,舍入到最近的int,然后除以2.

这样,2.49变为4.98,变为5,变为2.5.
2.24变为4.48,轮到4变为2.

  • @RohitJain`(int)d + 0.5`改变6.1到6.5,这不是他想要的 (3认同)
  • `Math.rint`是对'double`进行HALF_EVEN舍入的方法. (2认同)

Dan*_*yMo 7

@ RobWatt答案的更通用的解决方案,以防您想要回合其他内容:

private static double roundTo(double v, double r) {
  return Math.round(v / r) * r;
}

System.out.println(roundTo(6.1, 0.5));     // 6.0
System.out.println(roundTo(10.4999, 0.5)); // 10.5
System.out.println(roundTo(1.33, 0.25));   // 1.25
System.out.println(roundTo(1.44, 0.125));  // 1.5
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个,虽然我建议改变`r`来表示你试图去的任何东西的倒数.那么计算将是'Math.round(v*r)/ r;`.这样做可以更容易地舍入到最近的第三个或其他具有杂乱十进制表示的分数. (2认同)