我有一个 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。
我有一个 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。
要获得没有指数部分的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
尝试使用 BigDecimal.toPlainString() 根据需要获取纯字符串的值。
也许使用 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
我怀疑你试图做的任何事情都没有意义,因为你似乎试图获得一个不是你认为的值。
如果您想在 BigDecimal 对象上执行此操作,而不是使用格式化程序将其转换为字符串,您可以在 Java 8 上通过 2 个步骤执行此操作:
您可以尝试此代码段以更好地理解行为
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