java双除法与大十进制四舍五入上半下半
我知道这个话题涉及面很广。但是当我读到大十进制主题的答案时,我感到困惑。 我希望你不要生气,我是从这个话题开始的 我正在创建一个程序,用几个数字做一个非常简单的除法。我有两个变量代表钱的总和。变量和答案的精度为零后5位(x.xxxxx)。我希望我的答案尽可能精确(仍然是零后5位,但精确四舍五入) 下面是我的示例代码:java双除法与大十进制四舍五入上半下半,java,Java,我知道这个话题涉及面很广。但是当我读到大十进制主题的答案时,我感到困惑。 我希望你不要生气,我是从这个话题开始的 我正在创建一个程序,用几个数字做一个非常简单的除法。我有两个变量代表钱的总和。变量和答案的精度为零后5位(x.xxxxx)。我希望我的答案尽可能精确(仍然是零后5位,但精确四舍五入) 下面是我的示例代码: public static void main(String[] args) { double a =1.0; double b =3.0;
public static void main(String[] args) {
double a =1.0;
double b =3.0;
double c;
c=(double)Math.round((a/b)*100000)/100000;
System.out.println(c); //prints 0.33333
BigDecimal d= new BigDecimal("1.0");
BigDecimal e = new BigDecimal("3.0");
BigDecimal f;
f=d.divide(e, 5, RoundingMode.HALF_DOWN);
System.out.println(f);//prints 0.33333
BigDecimal k = new BigDecimal(1.0);
BigDecimal l = new BigDecimal(3.0);
BigDecimal m;
m=k.divide(l, 5, RoundingMode.HALF_DOWN);
System.out.println(m);//prints 0.33333
BigDecimal o= new BigDecimal("1.0");
BigDecimal p = new BigDecimal("3.0");
BigDecimal q;
q=o.divide(p, 5, RoundingMode.HALF_UP);
System.out.println(q);//prints 0.33333
}
问题1:为什么RoundingMode.HALF_DOWN和RoundingMode.HALF_UP给出相同的答案。他们中的一个不应该给0.33334。
问题2:在哪种情况下,当我比较两个双精度的除法和四舍五入法与使用BigDecimal-HALF_-DOWN法时,预测值有什么不同。
问题3:当我使用带字符串的bigdecimal构造函数与使用double时,是否应该有区别。在哪种情况下有区别?
问题4:你建议用哪种方法计算金钱,为什么
谢谢。:) 尝试使用
BigDecimal.ROUND\u天花板
和BigDecimal.ROUND\u地板
f=d.divide(e, 5, BigDecimal.ROUND_FLOOR);
m=k.divide(l, 5, BigDecimal.ROUND_FLOOR);
q=o.divide(p, 5, BigDecimal.ROUND_CEILING);
而不是RoundingMode.HALF_UP
和RoundingMode.HALF_DOWN
f=d.divide(e, 5, RoundingMode.HALF_DOWN);
m=k.divide(l, 5, RoundingMode.HALF_DOWN);
q=o.divide(p, 5, RoundingMode.HALF_UP);
输出
0.33333
0.33333
0.33334
当你用1.0除以3.0,结果是0.333。。。如果您阅读规范,您将看到,如果丢弃分数正好为0.5,则向上取整和向下取整只会产生不同的结果,否则它们的行为相同。所以你看到了人们的期望 如果您正在对具有任何实际意义的资金进行计算(生成财务报告、计算销售税等),那么您需要了解在您的情况下法律上预期的四舍五入模式。别当牛仔