在 Java 里把 Float 浮点数存到数据库,通常有 几种常见做法,选哪种取决于你对精度、范围、性能的要求。
FLOAT / DOUBLE适合:对精度要求不高的场景(如分数、比率、统计值)
Float f = 3.14f;
CREATE TABLE test (
id INT PRIMARY KEY,
score FLOAT
);
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO test(id, score) VALUES (?, ?)"
);
ps.setInt(1, 1);
ps.setFloat(2, f);
ps.executeUpdate();
✅ 优点:简单、性能好
❌ 缺点:FLOAT/DOUBLE 有精度误差(二进制无法精确表示小数)
DECIMAL(推荐用于金额)DECIMAL,Java 用 BigDecimal适合:金额、价格、精确计算
CREATE TABLE test (
id INT PRIMARY KEY,
price DECIMAL(10,2)
);
BigDecimal price = new BigDecimal("9.99");
ps.setBigDecimal(2, price);
✅ 优点:精度可控
❌ 缺点:计算稍慢
⚠️ 千万不要用
Float存钱
INT例如:金额单位用“分”
Float money = 9.99f;
int fen = Math.round(money * 100);
数据库:
amount INT
读取时再除以 100
✅ 适合:简单金额、传感器数据
❌ 可读性差
value VARCHAR(50)
ps.setString(2, String.valueOf(f));
❌ 不能计算、不能排序
✅ 仅用于日志类数据
private Float score;
<result column="score" property="score" jdbcType=FLOAT/>
@Column(precision = 10, scale = 2)
private BigDecimal price;
| 场景 | 推荐方式 |
|---|---|
| 普通数值 | FLOAT / DOUBLE |
| 金额 | DECIMAL + BigDecimal |
| 高性能数值 | INT(放大) |
| 日志 | VARCHAR |
如果你能告诉我:
我可以直接给你最合适的表结构和代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。