我有这个:
double priceMulti = 1.3;
double price = Double.parseDouble(jTextField1.getText());
//some if's and else's
double date = (1980 * 2);
double random = Math.random()*15;
jLabel28.setText(String.valueOf((priceMulti * price * date * random)/price));
double copies = Double.parseDouble(jLabel28.getText());
jLabel33.setText(String.valueOf(copies / price));
代码,我想将价格和副本(其双倍数)的变量更改为BigDecimals。 我知道有一些像这样的主题,但我的代码有点不同。 解决了,谢谢!
答案 0 :(得分:1)
要避免的主要问题是在任何时候将字符串转换为double。一旦你这样做,数字四舍五入到二进制分数。您可以而且应该直接从表示小数部分的String构造一个BigDecimal。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
String s = "5.2";
double d = 5.2;
BigDecimal fromString = new BigDecimal(s);
BigDecimal fromDouble = new BigDecimal(d);
System.out.println("From string: " + fromString);
System.out.println("From double: " + fromDouble);
}
}
结果:
From string: 5.2
From double: 5.20000000000000017763568394002504646778106689453125
fromString
包含精确的“5.2”到小数的转换,准备进行算术运算。 fromDouble首先被舍入到一个可以精确表示为二进制分数的数字。它非常非常接近5.2,但略有不同。
要构造表示编译时常量的BigDecimal,您仍然需要使用String参数构造函数:new BigDecimal("5.2")
而不是new BigDecimal(5.2)
。
答案 1 :(得分:0)
将双打改为BigDecimals
查看构造函数BigDecimal(String)
double val = 5.2;
BigDecimal bd = new BigDecimal(String.valueOf(val));
System.out.println(bd);
探索BigDecimal
的其他构造函数。