我正在对高十进制精度 BigDecimal 对象进行计算。
我正在使用需要双精度参数的第三方库。当我尝试将其转换为 double 时,我得到指数格式的值而不是小数。
BigDecimal 0.000035000000000
Double 3.5E-5
BigDecimal bd;
BigDecimal(0.0000349999999995631583260546904057264328002929687500);
bd= bd.setScale(15,BigDecimal.ROUND_CEILING);
Log.i("bd","bd "+bd.toPlainString());
Log.i("bd","double"+bd.doubleValue());
我找到了多种方法将此 3.5E-5 值转换为正确的小数点,但仅限字符串格式。而我需要双倍的值
在 String 对象中可以得到没有指数的结果,但在 double 中则不行
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(16);
String test=df.format(bd,doubleValue());
System.out.println("op2 "+test);
Double test1=Double.parseDouble(test);
System.out.println("op2 "+test1);
输出 op2 .000035 op2 3.5E-5
自从几天以来我一直在努力寻找解决方案,因为我无法控制需要值加倍的第三方库
推荐链接
以完全精度格式化 BigDecimal(不带科学记数法) https://stackoverflow.com/questions/15834879/format-bigdecimal-without-scientific-notation-with-full-precission
将java中的指数值转换为数字格式 https://stackoverflow.com/questions/13563747/converting-exponential-value-in-java-to-a-number-format
Java中指数形式到小数的转换 https://stackoverflow.com/questions/1826065/conversion-from-exponential-form-to-decimal-in-java
如何解决 Java 舍入双精度问题 https://stackoverflow.com/questions/179427/how-to-resolve-a-java-rounding-double-issue
Java BigDecimal 不带 E https://stackoverflow.com/questions/12026610/java-bigdecimal-without-e
如何避免 Double 中的科学记数法? https://stackoverflow.com/questions/20813631/how-to-avoid-scientific-notation-in-double
我的问题与这些链接不同,我不希望双精度作为没有指数的字符串,而是只想要双精度格式。
EDIT
如果传递的 double 值是指数格式,基于 NDK 的库将进一步对该对象进行计算,这将导致更多的小数点和更大的指数值。所以,我想传递一个没有 E 的简单双精度