如何以科学计数法打印此内容:
BigDecimal r= (a.subtract(exact, MathContext.DECIMAL128)).divide(exact, MathContext.DECIMAL128).stripTrailingZeros();
DecimalFormat format = new DecimalFormat("0.###E0");
System.out.println(new BigDecimal(format.format(r));
哪里:
a = 1.111111111111111160454356650006957352161407470703125
exact = 0.11
返回:
r = 0.900010000000000004
有任何想法吗?我也尝试过在BigDecimal上调用EngineeringString(),但这似乎也不适用于我
最佳答案
你把这件事夸大了。您唯一需要的是:
System.out.println(format.format(r));
DecimalFormat对象确实创建了一个字符串,再次创建BigDecimal实例将再次解析字符串中的数字-并且在BigDecimal实例上调用toString()方法,产生您所描述的输出...
一些澄清
BigDecimal
和其他数字格式(以及日期!)也以二进制格式存储在内存中,这是人类对它们的抽象。例如,BigDecimal
存储十进制数字以及小数点所在的位置。 Floating point numbers are even more sophisticated. Date存储The Epoch中的秒数。您需要格式化它们以使其可读。格式化是指创建一个String(或语义类似)对象,该对象以所需格式表示给定对象的值。这不涉及以任何方式更改原始对象。默认格式toString()提供了一种通用格式。以您想要的方式获得输出并不意味着更改要使用toString()正确格式化的值,而是将未更改的值转换为正确的String。很好的例子是Double.toString()(使用sun.mic.FloatingDecimal):当数字足够大或足够小时,它会进行指数表示,但在两者之间,它以纯十进制格式打印...
关于java - 将BigDecimal转换为科学计数法Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18766595/