浮动或小数价格?

tom*_*tom 18 mysql sql database sql-server database-design

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

Max*_*xVT 36

浮点数不准确,可能会引入累积舍入误差.十进制是必须准确的财务信息的最佳格式.

  • 十进制也不准确 - 但它并不像我们期望的那样精确. (3认同)

Mic*_*rdt 15

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

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

花车存储为二进制小数,和他们没有表现得像小数-他们的行为往往不是什么用十进制数学人们期待.有关详细说明,请阅读"浮点指南".

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


Azh*_*har 9

对于财务计算,请使用Decimal

根据IEEE 754 Floats总是二进制,只有新标准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
Run Code Online (Sandbox Code Playgroud)

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