如何从 10.0/3*3 获得 BigDecimal 和 double?
How to get from 10.0/3*3 BigDecimal and double?
double a = 10.0;
double b =3;
double c = a/b;
System.out.println(c*b);//answer = 10.0
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
BigDecimal bigDecimal2 = new BigDecimal("3");
System.out.println(bigDecimal1.multiply(bigDecimal2));//answer = 10.0000000000000005
我正在尝试做一个计算器,但是 10/3*3 有问题
我不想只计算 10/3*3 这个公式,我想 return 这个公式加上 0.2323232323232 的浮点数。所以使用BigDecimal class。有问题
我无法得到确切的结果,这就是我想要的 10,
而不是得到 10.0000000000000005
我相信你的问题可能出在这里
double c = a/b;
...
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
您期望双数可以完美 表示 10/3,但我怀疑它是否可以
也许可以尝试这样的方法,它始终将数字表示为 BigDecimal
new BigDecimal("10").divide(new BigDecimal("3"))
此时您会注意到 10/3 不能表示为小数
Non-terminating decimal expansion; no exact representable decimal result
您需要决定您想要的精度,然后使用舍入
new BigDecimal("10")
.setScale(10)
.divide(new BigDecimal("3"), BigDecimal.ROUND_HALF_EVEN)
或者您可以按照 Patricia 的建议使用有理数库。或许见 Is there a commonly used rational numbers library in Java?
double a = 10.0;
double b =3;
double c = a/b;
System.out.println(c*b);//answer = 10.0
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
BigDecimal bigDecimal2 = new BigDecimal("3");
System.out.println(bigDecimal1.multiply(bigDecimal2));//answer = 10.0000000000000005
我正在尝试做一个计算器,但是 10/3*3 有问题 我不想只计算 10/3*3 这个公式,我想 return 这个公式加上 0.2323232323232 的浮点数。所以使用BigDecimal class。有问题 我无法得到确切的结果,这就是我想要的 10, 而不是得到 10.0000000000000005
我相信你的问题可能出在这里
double c = a/b;
...
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
您期望双数可以完美 表示 10/3,但我怀疑它是否可以
也许可以尝试这样的方法,它始终将数字表示为 BigDecimal
new BigDecimal("10").divide(new BigDecimal("3"))
此时您会注意到 10/3 不能表示为小数
Non-terminating decimal expansion; no exact representable decimal result
您需要决定您想要的精度,然后使用舍入
new BigDecimal("10")
.setScale(10)
.divide(new BigDecimal("3"), BigDecimal.ROUND_HALF_EVEN)
或者您可以按照 Patricia 的建议使用有理数库。或许见 Is there a commonly used rational numbers library in Java?