我有一个BigDecimal变量
BigDecimal x = new BigDecimal("5521.0000000001");
公式:
x = x.add(new BigDecimal("-1")
.multiply(x.divideToIntegralValue(new BigDecimal("1.0"))));
我想删除整数部分,以获取值x = ("0.0000000001")
,但我的新值是1E-10而不是0.0000000001。
答案 0 :(得分:17)
要获得String
没有指数部分的BigDecimal
表示,您可以使用
BigDecimal.toPlainString()
。在您的示例中:
BigDecimal x = new BigDecimal("5521.0000000001");
x = x.add(new BigDecimal("-1").
multiply(x.divideToIntegralValue(new BigDecimal("1.0"))));
System.out.println(x.toPlainString());
打印
0.0000000001
答案 1 :(得分:1)
也许使用BigDecimal并不能真正帮助你。
double d = 5521.0000000001;
double f = d - (long) d;
System.out.printf("%.10f%n", f);
打印
0.0000000001
但值5521.0000000001
只是一种近似表示。
实际的表示是
double d = 5521.0000000001;
System.out.println(new BigDecimal(d));
BigDecimal db = new BigDecimal(d).subtract(new BigDecimal((long) d));
System.out.println(db);
打印
5521.000000000100044417195022106170654296875
1.00044417195022106170654296875E-10
我怀疑你想要的任何东西都没有意义,因为你似乎试图获得的价值不是你想象的那样。
答案 2 :(得分:1)
尝试使用BigDecimal.toPlainString()根据需要将值作为纯字符串获取。
答案 3 :(得分:0)
如果要在BigDecimal对象上执行此操作而不将其转换为带有格式化程序的String,则可以在Java 8上执行以下两步:
您可以尝试使用此代码段来更好地了解行为
BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble("50"));
bigDecimal = bigDecimal.setScale(2);
bigDecimal = bigDecimal.stripTrailingZeros();
if (bigDecimal.scale()<0)
bigDecimal= bigDecimal.setScale(0);
System.out.println(bigDecimal);//50
bigDecimal = BigDecimal.valueOf(Double.parseDouble("50.20"));
bigDecimal = bigDecimal.setScale(2);
bigDecimal = bigDecimal.stripTrailingZeros();
if (bigDecimal.scale()<0)
bigDecimal= bigDecimal.setScale(0);
System.out.println(bigDecimal);//50.2
bigDecimal = BigDecimal.valueOf(Double.parseDouble("50"));
bigDecimal = bigDecimal.setScale(2);
bigDecimal = bigDecimal.stripTrailingZeros();
System.out.println(bigDecimal);//5E+1
bigDecimal = BigDecimal.valueOf(Double.parseDouble("50.20"));
bigDecimal = bigDecimal.setScale(2);
bigDecimal = bigDecimal.stripTrailingZeros();
System.out.println(bigDecimal);//50.2