有人可以帮助我获得BigDecimal
的确切值吗?
我的代码如下,
import java.math.BigDecimal;
public class HelloWorld{
public static void main(String []args){
String x="2.7955814565E10";
BigDecimal y=new BigDecimal(x);
System.out.println(y.toPlainString());
}
}
我在数据库中的实际值为 27955814565.0 ,即String
。我从DB读取了此字符串,并将其设置在amt字段具有类型字符串的bean类中,使用值“ 2.7955814565E10”。当我尝试将其转换为BigDecimal
时,我得到的是27955814565而不是27955814565.0。
有人可以告诉我这是什么问题,因为对于其余所有字段而言,用于将字符串值转换为BigDecimal的逻辑工作正常,并且我想要与DB中一样的确切值吗?
答案 0 :(得分:3)
在这种情况下,BigDecimal不会推断出多余的数字。
如果输入为
String x = "2.79558145650E10"; // note the extra 0
您将获得预期的结果。您还可以根据需要添加数字。
String x = "2.7955814565E10";
BigDecimal y = new BigDecimal(x);
if (y.scale() < 1)
y = y.setScale(1);
System.out.println(y.toPlainString());
打印
27955814565.0
顺便说一句,如果您输入的是
String x = "2.7955814565000E10"; // note the extra 000
输出为
27955814565.000
答案 1 :(得分:1)
您已经知道,您的字符串采用科学计数法, 要将这些值转换为原始的BigDecimal或Decimal,我们需要一种正确的方法。
public class Test {
public static void main(String[] args) {
double firstNumber = 12345678;
double secondNumber = 0.000012345678;
String firstNumberAsString = String.format ("%.0f", firstNumber);
String secondNumberAsString = String.format("%.12f",secondNumber);
System.out.println(firstNumberAsString);
System.out.println(secondNumberAsString);
}
}
输出将是:
12345678
0.000012345678
您也可以在BigDecimal上使用Format方法来实现您的目标。
DecimalFormat decimalFormat =新的DecimalFormat(“ 0.0000000000”);