将Float转换为String而不损失精度-Java

时间:2019-05-29 03:16:34

标签: java

我想将浮点数转换为String而不丢失其精度。

40075016.68557849 转换为String时,它表示为 4.0075016E7

我需要使其完全代表所输入的值,即“ 40075016.68557849 ”。

我已经尝试过String.valueOf(),Float(40075016.68557849f).toString(),但是没有任何方法可以正常工作。

2 个答案:

答案 0 :(得分:1)

BigDecimal

如果需要精确地保留小数,则不能使用浮点类型float / Floatdouble / Double。浮点技术trades away accuracy用于提高执行速度。并且它们可以容纳的数字大小有限制。

请改为使用BigDecimal。慢得多,但准确。

new BigDecimal( "40075016.68557849" ) 

答案 1 :(得分:0)

如果数字不是必须可读的,则可以使用Double.doubleToLongBits()Double.longBitsToDouble(),然后打印长号。这将保留该值的 exact 位模式。尤其是在重要的情况下,它可以保留NaN的确切样式。

另一个选项可能是Double.toHexString()

如果该数字需要人类可读,请检查this document。它解释说,打印到17个十进制数字(%.17g%.17f)足以确保回读字符串会产生相同的数字。