BigDecimal的toString()的使用方法
admin
2023-02-14 07:20:05
0

BigDecimal 的 toString() 方法将会把 BigDecimal 通过字符串的方式输出。这个方法将会在必要的时候使用指数进行输出。

具体的转换步骤是按照下面的步骤进行转换的:

BigDecimal的非标度值的绝对值用字符’0’到’9’,没有被转换为一个字符串基地10零(除非它的值是零,在这种情况下,一个单一的’0’字符被使用)。

接下来,计算调整的指数;这是无效的标度,加上字符的转换的标度值,减1的次数。也就是说,-scale+(ulength-1),其中ulength是十进制数字(其精度)的非标度值的绝对值的长度。

如果该比例大于或等于零,并且调整的指数大于或等于-6,该号码将被转换为字符的形式,而无需使用指数表示法。

在这种情况下,如果该比例是零,则没有小数点被添加和如果规模正小数点将被插入的规模指定的字符数的小数点的右边。 ‘0’字符添加到转换的非标度值的左侧是必要的。如果前面没有字符,小数点这个插入之后再传统的’0’字符作为前缀。

否则(即,如果该比例是负的,或经调整的指数小于-6),该号码将被采用指数表示法转换为字符形式。在这种情况下,如果转换后的BigInteger有一个以上的位小数点第一位数字后插入。

在字符形式的指数,然后后缀转换非标度值(也许插入小数点);这包含字母“E”后面立刻被调整的指数转换为字符形式。

后者的基数为十,使用字符’0’到’9’,没有前导零,并且总是由前缀符号字符’ – ‘(‘ u002D’),如果调整后的指数为负数,否则为’+'(‘ u002B’)。

‘ – ‘最后,整个字符串由一个减号字符的前缀(‘ u002D’)如果非标度值小于零。如果非标度值为零或正数无符号字符作为前缀。

不使用科学计数法将 BigDecimal 转换为 String

SRC

请参考 GitHub 上的源码代码中 bigDecimalWithoutScientificNotationTest():方法

https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java

() {
    String input = RandomStringUtils.()
            + + + + + + + + + + + + + + + + + + + + + + + + + + + BigDecimal bigNumber = BigDecimal(input)String numberStr = bigNumber.toString().info(numberStr)}

 

OUTPUT

程序最后的输出如下,将会输出转换后的字符串。

2020/02/25 09:43:29.595 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 1503277200971234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234554324324362432767463726478326478326784637264783264736274673864736473246354635463546325645326456325463546536453654632546354653463254653453264564635463263453264

使用科学计数法将 BigDecimal 转换为 String

SRC

请参考 GitHub 上的源码代码中 bigDecimalScientificNotation():方法

https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java

() {
    BigDecimal bigNumberString numberStrMathContext mc = MathContext()bigNumber = BigDecimal(RandomStringUtils.()+mc).info(bigNumber.toString()).info(bigNumber.toEngineeringString()).info(bigNumber.toPlainString())}

 


OUTPUT

程序最后的输出如下,将会输出转换后的字符串。

2020/02/25 10:00:50.909 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 8.31198E+14
2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831.198E+12
2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831198000000000

BigDecimal类有3个 toString 方法,分别是 toString()、 toEngineeringString() 、toPlainString().

从 BigDecimal 的注释中可以看到这3个方法的区别:

  • toString() – 在必要的时候使用科学计数法

  • toEngineeringString() 在必要的时候使用工程计数法。类似于科学计数法,只不过指数的幂都是3的倍数,这样方便工程上的应用,因为在很多单位转换的时候都是10^3

  • toPlainString() – 不使用任何科学计数法。

不使用指数

科学计数法

工程计数法

27002.7 × 10³2.7 × 10³
270002.7 × 10⁴27 × 10³
2700002.7 × 10⁵270 × 10³
27000002.7 × 10⁶2.7 × 10⁶

可以看到根据不同的输出格式要求,BigDecimal 将会输出不同格式的内容。这个就便于我们在后面的科学计算中进行转换和输出。

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...