我想将浮点数转换为String而不丢失其精度。
将 40075016.68557849 转换为String时,它表示为 4.0075016E7 。
我需要使其完全代表所输入的值,即“ 40075016.68557849 ”。
我已经尝试过String.valueOf(),Float(40075016.68557849f).toString(),但是没有任何方法可以正常工作。
答案 0 :(得分:1)
BigDecimal
如果需要精确地保留小数,则不能使用浮点类型float
/ Float
和double
/ Double
。浮点技术trades away accuracy用于提高执行速度。并且它们可以容纳的数字大小有限制。
请改为使用BigDecimal
。慢得多,但准确。
new BigDecimal( "40075016.68557849" )
答案 1 :(得分:0)
如果数字不是必须可读的,则可以使用Double.doubleToLongBits()
和Double.longBitsToDouble()
,然后打印长号。这将保留该值的 exact 位模式。尤其是在重要的情况下,它可以保留NaN的确切样式。
另一个选项可能是Double.toHexString()
。
如果该数字需要人类可读,请检查this document。它解释说,打印到17个十进制数字(%.17g
或%.17f
)足以确保回读字符串会产生相同的数字。