作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以看到有数百篇关于四舍五入小数位主题的帖子。然而,我到处搜索,似乎找不到与我的问题相匹配的先前实例。我对 java 还很陌生。
我正在尝试计算一条线的斜率,将其分配给一个变量,并将该变量的内容格式化为小数点后 4 位。
我尝试过DecimalFormat(似乎返回一个字符串,我需要一个可以在另一阶段计算中使用的数值)我尝试过 BigDecimal (似乎无法弄清楚如何构造它和 setScale)。
下面是我的代码:
import java.math.BigDecimal;
public class Scratch {
public static void main(String[] args) throws Exception {
BigDecimal slope1, slope2, slope3;
slope1 = new BigDecimal((8 - 8) / (20 - 5));
slope2 = new BigDecimal((9 - 8) / (22 - 5));
slope3 = new BigDecimal((9 - 8) / (22 - 20));
slope1 = slope1.setScale(4);
slope2 = slope1.setScale(4);
slope3 = slope1.setScale(4);
System.out.println(slope1);
System.out.println(slope2);
System.out.println(slope3);
}
}
结果输出是:
0.0000
0.0000
0.0000
如何构建大数据对象,设置其比例,并以将计算的实际结果精确到小数点后 4 位而不是 0.0000 的方式进行计算?
任何帮助将不胜感激。我已经搞乱这个好几个小时了。
最佳答案
这里有两个问题。
首先是您在 BigDecimal 的构造函数中使用整数算术。您可以通过将值转换为 double 来解决此问题。
您的第二个问题是您将 slope1
的比例设置了三次,并忽略了 slope2
和 slope3
的值:
slope1 = slope1.setScale(4);
slope2 = slope1.setScale(4); // should be slope2
slope3 = slope1.setScale(4); // should be slope3
但是,修复此问题后,当您尝试计算 slope2
时,您将收到 ArithmeticException
。每当您使用 scale()
对数字进行舍入时,您都需要指定 RoundingMode
,以便它知道您想要如何舍入。 p>
试试这个:
slope1 = new BigDecimal((double) (8 - 8) / (20 - 5));
slope2 = new BigDecimal((double) (9 - 8) / (22 - 5));
slope3 = new BigDecimal((double) (9 - 8) / (22 - 20));
slope1 = slope1.setScale(4, RoundingMode.HALF_UP);
slope2 = slope2.setScale(4, RoundingMode.HALF_UP);
slope3 = slope3.setScale(4, RoundingMode.HALF_UP);
System.out.println(slope1); // 0.0000
System.out.println(slope2); // 0.0588
System.out.println(slope3); // 0.5000
关于java - 如何在Java中将计算结果四舍五入到小数点后n位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942313/
我是一名优秀的程序员,十分优秀!