BigDecimal toEngineeringString不起作用

时间:2015-09-11 14:32:24

标签: java android

我会使用toEngineeringString(),但它不起作用:

Log.v("smslms",BigDecimal.valueOf(1_000_0000_000_000_000L).toEngineeringString());`

输出:

09-11 16:26:12.221  18492-18492/skarwild.game V/smslms﹕ 10000000000000000

1 个答案:

答案 0 :(得分:3)

它的行为与documented完全相同:

  

返回一个表示BigDecimal的字符串,如toString()方法中所述,但如果使用指数表示法,则将10的幂调整为三的倍数(工程符号),使得非零的整数部分值将在1到999的范围内。

现在toString()指定:

  

通过以下步骤创建BigDecimal的标准规范字符串形式:首先,使用字符“0”到“9”将BigDecimal的未缩放值的绝对值转换为十进制字符串没有前导零(除非它的值为零,在这种情况下使用单个'0'字符。)

     

接下来,计算调整后的指数;这是否定的比例,加上未转换的非标定值中的字符数,减去一个。也就是说,-scale +(ulength-1),其中ulength是十进制数字中未缩放值的绝对值的长度(精度)。

     

如果比例大于或等于零且调整后的指数大于或等于-6,则数字将转换为字符形式,而不使用指数表示法。

在我们的例子中,比例为0,因此调整后的指数为16(或其左右)。因此,该值将转换为字符形式,而不使用指数表示法。