哪种类型(浮点或小数)最适合用于在mysql数据库中存储价格?浮点或小数的价格?
回答
浮点数不准确,可能引入累积舍入误差。十进制是必须精确的财务信息的最佳格式。
十进制也不准确 - 但它不是精确的我们期待的方式。 – 2010-09-22 11:49:11
如果Michael的评论的含义不明确,请参阅下面的答案。 – MaxVT 2010-09-24 16:11:23
对于金融计算使用十进制
根据IEEE 754浮动总是二进制,只有新标准IEEE 754R定义十进制格式。许多分数二进制部分永远不能等于精确的十进制表示。任何二进制数可以写成m/2^n(m,n正整数),任何十进制数作为m /(2^n * 5^n)。由于二进制数缺乏主要因子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
因此,对于金融计算使用十进制不浮动
请使用BigDecimal的,因为它是最好的价格,因为便士正确四舍五入到元。
Joshua Bloch建议BigDecimal。
你是否在某处看到“java”标签? – 2010-09-22 11:47:26
@迈克尔你让我! 。我用来寻找由java过滤新问题,所以我得到了这个问题。 – 2010-09-22 11:57:58
当我们存储一个浮点数时,我们不保存确切的数字,这是一个近似值。整数部分获得优先级,小数部分与类型大小相近。所以如果你有计算,并需要准确的结果使用十进制。
价格是十进制值,并在其上计算,预计表现得像小数,当谈到四舍五入,文字等
这正是小数类型做。
花车存储为二进制分数,他们做而不是行为像十进制分数 - 他们的行为往往不是人们习惯于十进制数学期望。详细解释请参阅The Floating-Point Guide。
对于货币值,永远不要使用二进制浮点类型 - 尤其是当您有完美的十进制类型时!
- 1. 浮点格式的小数点
- 2. Magento的价格在小数,但仅售价.00或价格0.99
- 3. 浮点数,小数或整数
- 4. 浮点等价?
- 5. 格式化小数点后不打印零点的浮点数
- 6. SQL:浮点数到小时格式
- 7. 声明浮点数或浮点数吗?
- 8. 浮点格式化为3或4位小数
- 9. Rails 3 GPS坐标的浮点数或小数点
- 10. 小数位数浮点数
- 11. 格式浮点数最小和最大小数位数
- 12. 将小数位数多的浮点数转换为浮点数只有一个小数位的浮点数
- 13. 价格字段的字符串,十进制或浮点数据类型?
- 14. 格式浮点数
- 15. 浮点数格式
- 16. Python:列表或浮点数组或浮点数
- 17. 如何格式化小数点(浮点)数网址
- 18. 将浮点数格式化为小数点后两位
- 19. Objective c格式浮点数,逗号和小数点后两位
- 20. 格式浮点数到小数点后n位
- 21. Android的 - 如何正确地解析字符串漂浮(价格数字格式:整数,小数或两者)
- 22. 带浮点数的格式
- 23. 的Javascript格式浮点数
- 24. 的Javascript - 价格和浮动
- 25. Javascript格式浮点数的小数位数
- 26. 具有相同重要小数位数的格式浮点数
- 27. Magento平价运费价格不含小数点
- 28. 精确到浮点小数?
- 29. 自定义小数点浮点数
- 30. 从浮点数中提取小数点
哪个数据库?有些像甲骨文只有十进制 – Mark 2010-09-22 11:28:53
请参阅[使用浮点数或小数的会计应用美元金额?](http://stackoverflow.com/questions/61872/use-float-or-decimal-for-accounting-application-dollar-amount “堆栈溢出”)。 – Andrew 2010-09-22 11:32:36
这是一个MySQL数据库,但如果其他人之间有差异,我喜欢听它。 – tom 2010-09-22 11:36:05