在Java中舍入双重值

目前我正在使用DecimalFormat类来舍入双值

double d = 42.405; DecimalFormat f = new DecimalFormat("##.00"); System.out.println(f.format(d)); output: 42.41; 

我正在使用Selenium进行浏览器应用程序测试,所以基于浏览器我需要舍入值。

例如:

IE收于42.405,收于42.40,其他人收于42.41。 但如果值类似于42.403,42.406,那么我会看到所有浏览器的一致性。 所以现在我必须在我的脚本中添加一个条件,所以如果浏览器是IE,那么舍入应该以这样的方式发生,我应该得到42.40,而对于其他浏览器应该得到42.41。 我怎样才能做到这一点?

您可以为DecimalFormatter指定RoundingMode ,但请根据您的需要选择它(我刚刚使用HALF_UP给出了一个示例)。

 double d = 42.405; DecimalFormat f = new DecimalFormat("##.00"); f.setRoundingMode(RoundingMode.HALF_UP); System.out.println(f.format(d)); // Prints 42.41 

或者,您也可以使用BigDecimal (如果你知道为什么我们通常选择BigDecimal而不是double )。

 double d = 42.405; BigDecimal bd = new BigDecimal(d); bd = bd.setScale(2, RoundingMode.HALF_UP); System.out.println(bd.doubleValue()); // Prints 42.41 
 DecimalFormat f=new DecimalFormat("0.00"); String formate = f.format(value); double finalValue = (Double)f.parse(formate) ; System.out.println(finalValue); 

使用setRoundingMode作为:

 f.setRoundingMode( RoundingMode.DOWN ); 

如何在Java中将数字舍入到n个小数位

试试这可能会有所帮助:

  double d = 42.405; System.out.println(String.format("%2.2f", d)); 

你也可以“随手”做到如下

 double d = 42.405; final double roundedValue = (Math.round(d * 100) / (double) 100); 

42.405情况下,你获得42.41 ,如果是42.40442.4 ,那么之后

 System.out.println(String.format("%2.2f", roundedValue)); 

你会得到必要的输出。 相应地为42.4142.40