为什么 MySQL 将 2 位小数舍入为意外值?
Why is MySQL rounding division of 2 decimal to an unexcepted value?
我有一个 table 包含以下数据:
区域 VARCHAR(50),
收入小数(20,2),
支出 DECIMAL(20,2),
百分比计费小数 (6,2)
这些值是从电子表格导入的,计费百分比不够精确。它四舍五入到小数点后两位。我可以通过收入/费用来计算它,但我没有得到我期望的值。
Select * 来自 return 'Counter', -1822.90, 2749.63, 0.66
-1822.90 / 2749.63 = -0.6629619.... 绝对值四舍五入到 66.3%,这是我需要的精度。
那么为什么,当我 运行 以下查询时:
Select 区域,(收入/支出)AS calcPercentBilled,PercentBilled 来自
我得到:'Counter, -1822.90, 2749.63, 1.000000, 0.66 ?
我的猜测是 MySQL 和类型有些古怪,但我无法弄清楚发生了什么。为什么 MySQL 将查询中 2 个小数的除法四舍五入为 1.000000?
问题在于您为 PercentBilled 指定的数据类型。
DECIMAL(6,2)
表示存储 6 位数字,其中 2 位在小数点后。因此,要提高存储值的精度,您需要更改列的类型,也许更改为 DECIMAL(9,6)
。这将允许您示例中的值存储为“0.662962”(即小数点后六位)。
请注意,除非您从源中重新导入数据,否则简单地更新列的类型不会改变丢失的精度。只需更改数据类型而不重新加载数据会将其更改为“0.660000”。
我有一个 table 包含以下数据:
区域 VARCHAR(50), 收入小数(20,2), 支出 DECIMAL(20,2), 百分比计费小数 (6,2)
这些值是从电子表格导入的,计费百分比不够精确。它四舍五入到小数点后两位。我可以通过收入/费用来计算它,但我没有得到我期望的值。
Select * 来自 return 'Counter', -1822.90, 2749.63, 0.66
-1822.90 / 2749.63 = -0.6629619.... 绝对值四舍五入到 66.3%,这是我需要的精度。
那么为什么,当我 运行 以下查询时: Select 区域,(收入/支出)AS calcPercentBilled,PercentBilled 来自
我得到:'Counter, -1822.90, 2749.63, 1.000000, 0.66 ?
我的猜测是 MySQL 和类型有些古怪,但我无法弄清楚发生了什么。为什么 MySQL 将查询中 2 个小数的除法四舍五入为 1.000000?
问题在于您为 PercentBilled 指定的数据类型。
DECIMAL(6,2)
表示存储 6 位数字,其中 2 位在小数点后。因此,要提高存储值的精度,您需要更改列的类型,也许更改为 DECIMAL(9,6)
。这将允许您示例中的值存储为“0.662962”(即小数点后六位)。
请注意,除非您从源中重新导入数据,否则简单地更新列的类型不会改变丢失的精度。只需更改数据类型而不重新加载数据会将其更改为“0.660000”。