我会使用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
答案 0 :(得分:3)
它的行为与documented完全相同:
返回一个表示BigDecimal的字符串,如toString()方法中所述,但如果使用指数表示法,则将10的幂调整为三的倍数(工程符号),使得非零的整数部分值将在1到999的范围内。
现在toString()
指定:
通过以下步骤创建BigDecimal的标准规范字符串形式:首先,使用字符“0”到“9”将BigDecimal的未缩放值的绝对值转换为十进制字符串没有前导零(除非它的值为零,在这种情况下使用单个'0'字符。)
接下来,计算调整后的指数;这是否定的比例,加上未转换的非标定值中的字符数,减去一个。也就是说,-scale +(ulength-1),其中ulength是十进制数字中未缩放值的绝对值的长度(精度)。
如果比例大于或等于零且调整后的指数大于或等于-6,则数字将转换为字符形式,而不使用指数表示法。
在我们的例子中,比例为0,因此调整后的指数为16(或其左右)。因此,该值将转换为字符形式,而不使用指数表示法。