BigDecimal输出格式正确

时间:2017-10-04 13:00:27

标签: bigdecimal

请帮我设置BigDecimal的输出。例如: 我需要输出长度小于8位的数字,如下所示:“12345678”,如果超过:“1,2345Å+ 9”。

方法

import { methodName } from b;

工作效果不如预期:

toPlainString();
toEngineeringString();
toString();

下面的代码生成下一个输出:

57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645

给我一​​个暗示我做错了什么?

1 个答案:

答案 0 :(得分:0)

据我所知(我希望我错了)你不能以特定的方式制作BigDecimal渲染。没有办法(我知道)让它使用科学或工程符号,或控制何时使用。工程符号将仅使用数字“需要指数”,并且在BigInteger.toString()的文档中解释了需要指数的情况。坦率地说,我发现这个解释难以理解,而且我从来没有弄清楚如何使行为在应用程序中遵循有用的模式。

我发现只是不尝试,并自己格式化数字更容易。这意味着在基数10中提取尾数和指数,然后在组件之间以“E”连接为字符串。可能需要对尾数部分进行舍入。如果您知道指数(在基数10中),您可以从其大小开始计算它是否超过您想要的阈值,使用科学计数法。如果没有,你可以使用BigDecimal.toPlainString(),也许可以使用合适的舍入。

工程符号可以用相同的方式处理,但是指数四舍五入到最接近的三的倍数,并且尾数经过调整以补偿。

有一个有用的库1可以执行必要的对数和幂操作,或者查看此问题2以获取一些建议。

我有一些代码可以完成这些工作,我很乐意与大家分享,但是我需要很长时间才能包含这些内容,而且我不能保证它具有生产质量,甚至可读性。