我被要求添加一个列包含员工的工资奖金,这种价值观的例子是给予,如:1099.99或2.00。任务还要求我添加适当的数据类型,但我不知道该使用哪种类型。我试着同时使用double和float,但无法区分结果。所以,帮我选择合适的数据类型。
inb24sb21#
计算机科学家Brian Kernighan写道:10.0乘以0.1几乎不等于1.0。FLOAT和DOUBLE都是IEEE 754格式值。它们可以存储各种浮点值,包括非常小或非常大的值,但它们的缺点是存在舍入误差。有关示例和详细信息,请阅读:
FLOAT
DOUBLE
FLOAT存储32位,DOUBLE存储64位。这只是意味着您可以使用DOUBLE存储更多有效位,但它仍然具有相同的舍入行为。这些数据类型适用于温度等科学测量,其中39度和38.99999997度之间的差异不会产生显著差异,特别是如果您只计算平均值或标准差。由于舍入行为,FLOAT和DOUBLE不应用于存储货币值。对于货币价值(例如你需要存储的工资),使用DECIMAL。DECIMAL和NUMERIC是精确缩放的数字。定义一个具有特定位数和小数点右侧特定位数的列。没有四舍五入问题;你存储的值会完全按照你存储的方式返回。您可以在数据中搜索特定值。DECIMAL和NUMERIC是同义词。没什么区别实际上,如果使用NUMERIC作为类型,MySQL会默默地将其替换为DECIMAL。你可能还想读一下我的书SQL Antipatterns, Volume 1: Avoiding the Pitfalls of Database Programming中的“舍入错误”一章。
DECIMAL
NUMERIC
gab6jxml2#
关于official documentation,我们有以下区别:
你可以询问浮动和固定数据库之间的区别,但这并不容易描述,尝试阅读相同的官方文档,例如this article。
0tdrvxhp3#
“没有区别”那是幸运的。用DECIMAL(m,n)赚钱。对于许多货币,DECIMAL(m,2),其中m足够大,即使CEO获得大幅加薪,您也不会溢出。DECIMAL occupies _approximately_ m/2 bytes. 1 billion dollars or Euros needs(11,2),占用5个字节。FLOAT和DOUBLE用于测量。FLOAT占用4个字节,大约有7个有效数字--足够表示温度、速度、高度等。DOUBLE(8个字节)提供大约16个有效数字;它可能需要从一些非常精确的科学研究。纬度和经度--FLOAT虽然可以精确区分路上的两辆车,但不能区分拥抱的两个人。另请参见https://mysql.rjweb.org/doc.php/latlng#representation_choices由于各种原因(许多没有在这里列出),没有一个表示可以根据乘法或除法时的银行规则进行“正确”的 * 舍入 *。加上美元和美分 * 将 * 与DECIMAl完全相同。
DECIMAL(m,n)
DECIMAL(m,2)
m
occupies _approximately_ m/2 bytes. 1 billion dollars or Euros needs
,占用5个字节。
和
用于测量。
占用4个字节,大约有7个有效数字--足够表示温度、速度、高度等。DOUBLE
DECIMAl
3条答案
按热度按时间inb24sb21#
计算机科学家Brian Kernighan写道:
10.0乘以0.1几乎不等于1.0。
FLOAT
和DOUBLE
都是IEEE 754格式值。它们可以存储各种浮点值,包括非常小或非常大的值,但它们的缺点是存在舍入误差。有关示例和详细信息,请阅读:
FLOAT
存储32位,DOUBLE
存储64位。这只是意味着您可以使用DOUBLE
存储更多有效位,但它仍然具有相同的舍入行为。这些数据类型适用于温度等科学测量,其中39度和38.99999997度之间的差异不会产生显著差异,特别是如果您只计算平均值或标准差。
由于舍入行为,
FLOAT
和DOUBLE
不应用于存储货币值。对于货币价值(例如你需要存储的工资),使用
DECIMAL
。DECIMAL
和NUMERIC
是精确缩放的数字。定义一个具有特定位数和小数点右侧特定位数的列。没有四舍五入问题;你存储的值会完全按照你存储的方式返回。您可以在数据中搜索特定值。DECIMAL
和NUMERIC
是同义词。没什么区别实际上,如果使用NUMERIC
作为类型,MySQL会默默地将其替换为DECIMAL
。你可能还想读一下我的书SQL Antipatterns, Volume 1: Avoiding the Pitfalls of Database Programming中的“舍入错误”一章。
gab6jxml2#
关于official documentation,我们有以下区别:
你可以询问浮动和固定数据库之间的区别,但这并不容易描述,尝试阅读相同的官方文档,例如this article。
0tdrvxhp3#
“没有区别”那是幸运的。
用
DECIMAL(m,n)
赚钱。对于许多货币,DECIMAL(m,2)
,其中m
足够大,即使CEO获得大幅加薪,您也不会溢出。DECIMALoccupies _approximately_ m/2 bytes. 1 billion dollars or Euros needs
(11,2),占用5个字节。
FLOAT和
DOUBLE用于测量。
FLOAT占用4个字节,大约有7个有效数字--足够表示温度、速度、高度等。DOUBLE
(8个字节)提供大约16个有效数字;它可能需要从一些非常精确的科学研究。纬度和经度--
FLOAT
虽然可以精确区分路上的两辆车,但不能区分拥抱的两个人。另请参见https://mysql.rjweb.org/doc.php/latlng#representation_choices由于各种原因(许多没有在这里列出),没有一个表示可以根据乘法或除法时的银行规则进行“正确”的 * 舍入 *。加上美元和美分 * 将 * 与
DECIMAl
完全相同。