在Java中舍入双值

在Java中舍入双值,java,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,那么我可以

目前我正在使用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。如何执行此操作?

您可以为指定,但请根据您的需要选择(我刚刚给出了一个使用
HALF\u UP
的示例)

或者,您也可以使用(如果您知道为什么我们通常选择
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
您可以为指定,但请根据您的需要进行选择(我刚才给出了一个使用
HALF\u UP
的示例)

或者,您也可以使用(如果您知道为什么我们通常选择
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

尝试以下方法可能会有所帮助:

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

尝试以下方法可能会有所帮助:

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

将setRoundingMode用作:

f.setRoundingMode( RoundingMode.DOWN );

使用setRoundingMode作为:

f.setRoundingMode( RoundingMode.DOWN );

您还可以按如下“轻松”完成

double d = 42.405;
final double roundedValue = (Math.round(d * 100) / (double) 100);
42.405
的情况下,您得到
42.41
,在
42.404
-
42.4
之后呢

System.out.println(String.format("%2.2f", roundedValue));
您将获得必要的输出<代码>42.41或
42.40
相应

您还可以按如下方式“轻松”完成

double d = 42.405;
final double roundedValue = (Math.round(d * 100) / (double) 100);
42.405
的情况下,您得到
42.41
,在
42.404
-
42.4
之后呢

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

您将获得必要的输出<代码>42.41或
42.40
相应

那么为什么要用大的
BigDecimal
来表示小的数字呢?为什么不使用普通格式?-1表示完全不必要的
BigDecimal
。你回答的第二部分看起来不错。@SebastianH-你怎么说那是不必要的?它可能对你没有用处,甚至可能对OP也没有用处,但我相信它对未来的用户会很有用。我在OP上给出了两个选项和所有选项,以使用他们需要的选项。我尊重你的投票,但我不会从答案中删除
BigDecimal
部分。@。这个问题的平均“未来用户”不是寻找高精度的算术,而是寻找基本的四舍五入。所以请不要生气,但我发现你答案的第一部分非常误导。@SebastianH-我对我的答案进行了一些编辑,尽管我仍然支持我所说的关于
BigDecimal
。仅供参考,无意冒犯:)那么为什么要用大的
BigDecimal
来表示小数字呢?为什么不使用普通格式?-1表示完全不必要的
BigDecimal
。你回答的第二部分看起来不错。@SebastianH-你怎么说那是不必要的?它可能对你没有用处,甚至可能对OP也没有用处,但我相信它对未来的用户会很有用。我在OP上给出了两个选项和所有选项,以使用他们需要的选项。我尊重你的投票,但我不会从答案中删除
BigDecimal
部分。@。这个问题的平均“未来用户”不是寻找高精度的算术,而是寻找基本的四舍五入。所以请不要生气,但我发现你答案的第一部分非常误导。@SebastianH-我对我的答案进行了一些编辑,尽管我仍然支持我所说的关于
BigDecimal
。仅供参考,恕不冒犯:)可能重复的可能重复的