正确格式的BigDecimal输出
请帮我设置BigDecimal的输出。例如: 我需要输出长度小于8位数字的数字,如下所示:“12345678”,如果多则输入:“1,2345Å+ 9”。正确格式的BigDecimal输出
toPlainString();
toEngineeringString();
toString();
是否按预期工作
方法并不:下面
public class TestBigDecimalOutput {
public static void main(String[] args) {
BigDecimal d = new BigDecimal("57657657657453646587980887663654676580.24545346565476767645");
String outPlainString = d.toPlainString();
String outEngineeringString = d.toEngineeringString();
String outString = d.toString();
System.out.println(outPlainString);
System.out.println(outEngineeringString);
System.out.println(outString);
}
}
代码使下一个输出:
57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645
给我一个提示我做错了什么?
据我所知(我有点希望我错了),你不能以特定的方式进行BigDecimal渲染。没有办法(我知道)使它使用科学或工程符号,或者控制它何时执行。工程符号只能用于“需要指数”的数字,并且需要指数的情况在BigInteger.toString()的文档中有解释。坦率地说,我发现这个解释很难遵循,我从来没有想过如何让这种行为在应用程序中遵循一个有用的模式。
我发现只是不尝试,并自己格式化数字更容易。这意味着提取基数为10的尾数和指数,然后在组件之间串接字符串“E”。尾数部分可能需要四舍五入。如果你知道指数(以10为底),那么你可以根据它的数量来计算它是否超出了你想要的阈值,因为使用了科学记数法。如果没有,你可以使用BigDecimal.toPlainString(),也许有适当的四舍五入。
工程符号可以用相同的方式处理,但指数四舍五入到最接近的三倍,尾数调整为补偿。
有一个有用的图书馆1可以做必要的对数和权力操作,或看到这个问题2的一些建议。
我有一些代码可以做到这一点,我很乐意分享,但是这是包含很长时间的方法,我不能保证它是生产质量,或者甚至是可读的。