将Double更改为BigDecimal

时间:2014-04-27 08:27:20

标签: 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)/price));
double copies = Double.parseDouble(jLabel28.getText());
jLabel33.setText(String.valueOf(copies / price));

代码,我想将价格和副本(其双倍数)的变量更改为BigDecimals。 我知道有一些像这样的主题,但我的代码有点不同。 解决了,谢谢!

2 个答案:

答案 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的其他构造函数。