浮动或小数价格?

时间:2010-09-22 11:24:48

标签: mysql sql sql-server database database-design

哪种类型(Float或十进制)最适合在mysql数据库中存储价格?

5 个答案:

答案 0 :(得分:35)

浮动不精确,可能会引入累积舍入错误。十进制是必须准确的财务信息的最佳格式。

答案 1 :(得分:15)

价格是十进制值,当涉及四舍五入,文字等时,预计它们的计算行为就像小数部分一样。

这正是十进制类型的作用。

浮点数存储为二进制分数,它们表现得像小数分数 - 它们的行为通常不是人们习惯于十进制数学所期望的。请阅读The Floating-Point Guide以获取详细说明。

对于金钱价值,永远不要使用二元浮点类型 - 特别是当你有一个非常好的十进制类型时可用!

答案 2 :(得分:9)

对于财务计算,请使用十进制

根据IEEE 754 Floats总是二进制,只有新标准IEEE 754R定义了十进制格式。许多小数二进制部分永远不能等于精确的十进制表示。任何二进制数都可以写成m / 2 ^ n(m,n正整数),任何十进制数都可以写为m /(2 ^ n * 5 ^ n)。由于binarys缺少素数因子5,所有二进制数都可以用小数精确表示,但反之则不然。

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

     1/4       1/8     1/16       1/32

因此,对于财务计算,请使用Decimal而不是FLOAT

答案 3 :(得分:1)

当我们在float中存储一个数字时,我们不保存确切的数字,它是一个近似值。整数部分获得优先级,小数部分与类型大小一样接近。因此,如果您有计算并需要准确的结果,请使用Decimal。

答案 4 :(得分:0)

请使用BigDecimal,因为它是最好的价格,因为便士适当地四舍五入到美元。

Joshua Bloch推荐BigDecimal。