如果你看下面,语法是相同的,但一个是拉变量来计算,而另一个是硬编码值。结果是不同的,我迷失了为什么会发生这种情况。有人有解释吗?
CAST(Amount / Quantity AS DECIMAL(10, 4)) AS [Price1], --36.5087
CAST(584.14 / 16 AS DECIMAL(10, 4)) AS [Price2], --36.5088
答案 0 :(得分:2)
重现OP结果的简单示例,MS Sql
SELECT
CAST(CAST(584.14 AS FLOAT) / 16 AS DECIMAL(10, 4)) AS [Price1],
CAST(584.14 / 16 AS DECIMAL(10, 4)) AS [Price2]
介意数据类型和转换规则。
答案 1 :(得分:1)
我假设你使用的是SQL Server(基于方括号)。
您看到的问题是因为文字的类型与列的类型不同。文字的类型是十进制的,并且在分割十进制数时有精确度和比例的特定规则。 "具体"并不意味着简单或直观。但they已有详细记录。
为什么这会有所不同?那么,不同的表示可能导致不同的结果。差异很小,但可能会显示在不太重要的小数位。
答案 2 :(得分:1)
@Drew在做一些研究时我发现了这个链接
https://msdn.microsoft.com/en-us/library/ms187752.aspx
其中说我们知道Float 近似数字 vs Decimal Exact Numerics
关于进一步调查我发现了这个链接
https://technet.microsoft.com/en-us/library/ms187912(v=sql.105).aspx
特别是这个段落
近似数值数据类型不存储指定的确切值 很多数字;他们存储了非常接近的近似值 值。对于很多应用来说,微小的区别 指定值和存储的近似值不明显。在 但是,时间差异变得明显。因为 浮点数和实数数据类型的近似性质,请勿使用这些 需要精确数字行为时的数据类型,例如 财务申请,涉及四舍五入的业务,或在 平等检查。而是使用整数,小数,金钱或 smallmoney数据类型。
所以如果您打算为财务应用程序使用decimal而不是float,请回答您的问题;)