为什么在Rails中对decimal类型进行运算有时会返回整数?
问题原因
你定义total字段时仅指定了precision(数值总位数),未显式设置scale(小数点后保留位数),Rails的decimal字段默认scale值为0,这意味着该字段实际只能存储整数,所有写入的小数都会被自动截断小数部分后落库。
运算@article.total + (1.1).to_d得到的确实是decimal类型的1.1,但赋值给字段后会触发数据库层的类型约束,最终存储到库中的值为1,读取时自然返回整数。
修复方法
修改字段定义,补充符合业务需求的scale参数即可,例如需要保留两位小数可调整为:
t.decimal "total", precision: 10, scale: 2, default: "0.0"
修改后执行迁移更新表结构,后续小数运算结果就会正常保留。
内容的提问来源于stack exchange,提问作者Ian R
相关产品推荐
相关产品推荐

