选 double 更稳妥,因其可精确表示15–16位有效数字,而 float 仅6–7位;判断依据是整个数值的有效数字位数而非小数位数,金融场景须用 bigdecimal,浮点比较应避免 ==。

选 float 还是 double,关键看你要存的数“有多少位数字真正重要”——不是小数点后几位,而是整数加小数一共能准确保留几位有效数字。
看有效数字位数决定用哪个
float 最多稳稳保证 6–7 位有效数字;double 能稳住 15–16 位。举个例子:
- 123456.789 —— 共 9 位数字 → float 存进去大概变成 123456.8(末尾失真),double 通常能完整保留
- 0.000123456789 —— 有效数字还是 123456789(9 位)→ 同样,float 会截断,double 更可靠
只要参与计算或存储的数值,其有效数字可能超过 7 位,就该直接上 double。
别只盯小数点后几位
很多人误以为“只要小数点后 2 位(比如金额)就用 float”,这是危险的。比如:
- 9999999.99 是 9 位有效数字 → float 已经撑不住,实际存成 1.0E7 或类似近似值
- 哪怕只是 10000000.01,整数部分 8 位 + 小数 2 位 = 10 位有效数字 → float 必丢精度
所以判断依据永远是“整个数的有效位数”,而不是小数位数。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
内存和场景不是首要理由
现代 JVM 和硬件下,float 的内存优势(4 字节 vs 8 字节)在绝大多数业务中几乎不可感知。除非你明确遇到以下情况之一:
- 要创建百万级 float 数组(如图像像素、传感器批量采样),且确认单个值只需 6–7 位精度
- 运行在资源极受限的嵌入式 JVM 环境(如某些 IoT 设备)
- 对接 OpenGL/Vulkan 等图形 API,接口明确要求 float 类型(如顶点坐标、法线)
其他情况,默认用 double 更省心、更少出错。
特别注意:金融和相等判断
无论 float 还是 double,都不能用于金额运算——因为 0.1 在二进制中无限循环,两者都会误差,只是 double 误差更小。该用 BigDecimal 或整数单位(如“分”)。
比较两个浮点数是否“逻辑相等”,永远不用 ==:
- ✅ 正确:
Math.abs(a - b) (对 double)或 <code>1e-6(对 float) - ❌ 错误:
a == b—— 即使看起来一样,二进制表示可能差一点点
这个习惯,跟选 float 还是 double 无关,但必须养成。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










