返回此 bigdecimal 的字符串表示形式,如果需要指数,则使用科学记数法。
根据以下步骤可创建 bigdecimal 的标准的规范化字符串形式:首先,使用不带前导零的字符 '0' 至 '9'(如果其值为零,则使用单个 '0' 字符)将 bigdecimal 的非标度值的绝对值转换为以十为基数的字符串。
其次,计算调整的指数;这是无效的标度,加上转换的非标度值中的字符数减 1。即:-scale+(ulength-1),其中 ulength 是十进制数字中非标度值的绝对值的长度(其精度)。
如果该标度大于或等于零,并且调整的指数大于或等于 -6,则在不使用指数记数法的情况下将该数转换为字符形式。在这种情况下,如果标度为零,则不添加小数点,如果标度为正数,则插入小数点,且标度指定了小数点右边的字符个数。必要时,将字符 '0' 添加到转换的非标度值的左边。如果插入后小数点前面没有字符,则以传统字符 '0' 为前缀。
否则(即:如果标度为负数,或者调整的指数小于 -6),使用指数记数法将该数转换为字符形式。在这种情况下,如果转换后的 biginteger 多于一位数,则小数点插入在第一个数字之后。然后,将字符形式的指数作为转换的非标度值(也许具有插入的小数点)的后缀;这包含字母 'e' 和直接跟在其后的转换为字符形式的调整指数。后者的基数为十,使用的字符是 '0' 到 '9',没有前导零,并且,如果调整的指数为负数,则总是以符号字符 '-' ('u002d') 为前缀,否则以 '+' ('u002b') 为前缀。
最后,如果非标度值小于零,则整个字符串以减号 '-' ('u002d') 为前缀。如果非标度值为零或正数,则不使用符号字符作为前缀。
示例:
对于左边的每个表示形式 [unscaled value, scale],得到的字符串显示在右边。
[123,0] "123"
[-123,0] "-123"
[123,-1] "1.23e+3"
[123,-3] "1.23e+5"
[123,1] "12.3"
[123,5] "0.00123"
[123,10] "1.23e-8"
[-123,12] "-1.23e-10"
注:
- 可区分的 bigdecimal 值和此转换的结果之间存在一对一的映射关系。即:每个可区分的 bigdecimal 值(非标度值和标度)都有唯一的字符串表示形式,作为使用 tostring 的结果。如果使用
bigdecimal(string)
构造方法将该字符串表示形式转换为 bigdecimal,则将恢复初始值。
- 给定的数产生的字符串总是相同的;它不受语言环境的影响。这意味着它可以用作交换十进制数据的规范化字符串表示形式,或用作 hashtable 的关键字等等。
numberformat
类及其子类可以处理区分语言环境的数的格式化和分析。
toengineeringstring()
方法可用于在工程计数法中表示带有指数的数。setscale
方法可用于对 bigdecimal 进行舍入,使其小数点后的位数为已知位数。
- 使用 character.fordigit 提供的数字到字符的映射关系。
- 覆盖:
- 类
object
中的 tostring
- 返回:
- 此 bigdecimal 的字符串表示形式。
- 另请参见:
character.fordigit(int, int)
,
bigdecimal(java.lang.string)