如何将float转换为无舍入、无科学计数法的字符串?
解决方案:Float转字符串(无科学计数法、无舍入)
问题本质
float类型精度有限,仅能精确表示-224到224(即-16777216至16777216)范围内的整数。当你将849071675赋值给float变量时,由于该数超出精确范围,实际存储的是最接近的可表示值849071680.0f——这就是直接打印输出科学计数法、用DecimalFormat处理得到849071680的核心原因。
可行方案
1. 改用精确整数类型存储(推荐)
如果原始值是整数,避免使用float,直接用int或long类型存储,可精确保留数值,转字符串无需额外处理:
int x3 = 849071675; System.out.println(x3); // 输出:849071675
2. 处理已有的float变量(仅能获取其实际存储值)
如果必须处理已存在的float变量,且需要避免科学计数法和舍入,可使用BigDecimal配合截断舍入模式,将float的实际值转换为字符串:
import java.math.BigDecimal; import java.math.RoundingMode; public class FloatToString { public static void main(String[] args) { Float x3 = 849071675f; // 将float转为BigDecimal,确保获取其精确存储值 BigDecimal bd = new BigDecimal(x3.toString()); // 截断小数部分,不进行舍入 bd = bd.setScale(0, RoundingMode.DOWN); System.out.println(bd.toString()); // 输出:849071680 } }
注意:此方法只能得到float实际存储的近似值,无法还原原始的849071675——因为该值从未被float精确存储过。
内容的提问来源于stack exchange,提问作者Hicham Cheikhaoui
相关产品推荐
相关产品推荐

