Java 将双精度更改为大小数

Java 将双精度更改为大小数,java,double,bigdecimal,Java,Double,Bigdecimal,我有这个: 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)

我有这个:

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));
代码,我想将price和copies(其为双精度)的变量更改为BigDecimals。 我知道有一些类似的主题,但我的代码有点不同。 解决了,谢谢

将双精度更改为大小数

看看构造器


探索其他的
BigDecimal

构造函数,要避免的主要事情是在任何时候将字符串转换为double。一旦你这样做了,这个数字就被四舍五入为一个二进制分数。您可以也应该直接从表示小数点的字符串构造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,您仍然需要使用字符串参数构造函数:
newBigDecimal(“5.2”)
not
newBigDecimal(5.2)

和?有什么问题吗?我不知道如何将double改为bigdecimal。你需要更具体一点阅读javadoc。这就是它的目的。您不想将double更改为BigDecimal,而是将string更改为BigDecimal。如果进行双精度运算,则已失去精度。`BigDecimal价格=新的BigDecimal(pri);`我这样做了,但它说找不到符号“BigDecimal”,所以看起来没有BigDecimal:OLook位于
BigDecimal
Import
java.math.BigDecimal
的不同构造函数中,是的,double price=double.parseDouble(jTextField1.getText());parsedDouble,但仍然存在错误。5.2不能精确表示为双精度,因此
val
的值非常接近但不完全等于5.2。BigDecimal的后续构造将获得调整后的值。您需要使用接受字符串参数的BigDecimal构造函数。
From string: 5.2
From double: 5.20000000000000017763568394002504646778106689453125