哪种类型(浮点或小数)最适合用于在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. 格式化小数点后不打印零点的浮点数
- 3. SQL:浮点数到小时格式
- 4. 声明浮点数或浮点数吗?
- 5. 浮点格式化为3或4位小数
- 6. 格式浮点数最小和最大小数位数
- 7. 将小数位数多的浮点数转换为浮点数只有一个小数位的浮点数
- 8. 价格字段的字符串,十进制或浮点数据类型?
- 9. 浮点数格式
- 10. 格式浮点数
- 11. Python:列表或浮点数组或浮点数
- 12. 如何格式化小数点(浮点)数网址
- 13. Objective c格式浮点数,逗号和小数点后两位
- 14. 格式浮点数到小数点后n位
- 15. ObjC格式化浮点数的小数位数字符串
- 16. Magento平价运费价格不含小数点
- 17. 从浮点数中提取小数点
- 18. 增量小数点,浮点数
- 19. 小数位浮点数和小数点的位置问题。小数点
- 20. 格式化浮到小数
- 21. 带有浮点数或小数值的jQuery.css('宽度')
- 22. 将小数点后两位的浮点数与小数点后六位的浮点数相除
- 23. Python浮点格式化最小字符
- 24. 正则表达式整数或浮点数与两位小数
- 25. 将最小可能浮点数添加到浮点数
- 26. 打印一个整数或小数点后n位的浮点数
- 27. 浮点数格式问题
- 28. 格式化浮点数
- 29. 标价格小数使用
- 30. 小数分隔价格woocommerce
哪个数据库?有些像甲骨文只有十进制 – 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