如何在Java中将两个小数位舍入到两位小数?

she*_*rry 62 java double

这就是我将双精度数转换为2位小数的方法:

amount = roundTwoDecimals(amount);

public double roundTwoDecimals(double d) {
    DecimalFormat twoDForm = new DecimalFormat("#.##");
    return Double.valueOf(twoDForm.format(d));
}
Run Code Online (Sandbox Code Playgroud)

如果金额= 25.3569或类似的东西,这很好用,但如果金额= 25.00或金额= 25.0,那么我得到25.0!我想要的是舍入和格式化为2位小数.

小智 52

只需使用:(简单如馅饼)

double number = 651.5176515121351;

number = Math.round(number * 100);
number = number/100;
Run Code Online (Sandbox Code Playgroud)

输出为651.52

  • 你应该写100.0而不是100,否则它会把它当作int. (12认同)
  • @Anatoly No - Java从左到右进行评估,并扩展到所有操作数的最佳匹配.数字是一个双倍,因此所有参与计算的数字都会扩大到两倍! (4认同)
  • 他将数字乘以100(因此651.517变为65151.7 ...),并将其四舍五入至最接近的1(因此变为65152),然后将其除以100(651.52)。 (2认同)
  • Math.round(0*100)/ 100 ==>输出为0,而不是0.00 (2认同)
  • Math.round(num * 100)/ 100.00 (2认同)

Mit*_*eat 19

使用数字占位符(0),与' #'尾随/前导零显示为不存在:

DecimalFormat twoDForm = new DecimalFormat("#.00");
Run Code Online (Sandbox Code Playgroud)

  • 我使用字符串格式来解决这个问题,String result = String.format("%.2f",amount); (14认同)

Rob*_*Rob 19

你在用钱吗?创建一个String然后将其转换回来是非常循环的.

使用BigDecimal.这已经被广泛讨论过了.你应该有一个Money班级,金额应该是一个BigDecimal.

即使你没有用钱,也要考虑BigDecimal.

  • 一定不行.OO编程意味着类是打字问题的答案.问问自己这个问题:Money是一类物体吗?显然答案是肯定的.如果这个论点没有影响你,你还有两个:1.来自分析模式的马丁福勒论证:单位需要建模或坏事发生,2.如果你愿意,我有一个可以给你钱的课程. (2认同)

use*_*421 9

不能 '将一个双精度值舍入到任意数量的小数位数',因为双精度数没有小数位.您可以将double转换为带有N个小数位的base-10 String,因为base-10确实有小数位,但是当你将它转换回来时,你又回到了double-land,带有二进制小数位.


小智 6

用这个

String.format("%.2f",doubleValue)//根据您的要求更改2.


小智 5

这是我能做到的最简单的事情,但它比我见过的大多数例子更容易完成工作.

    double total = 1.4563;

    total = Math.round(total * 100);

    System.out.println(total / 100);
Run Code Online (Sandbox Code Playgroud)

结果是1.46.