如果数字数据之间的自动转换在T-Sql
中表现如此,这真的很奇怪Declare @fdays as float(12)
Declare @mAmount As Money
Declare @fDaysi as float(12)
Set @fdays =3
Set @fdaysi =1
Set @mAmount=527228.52
Set @mAmount = @fdaysi * @mAmount/@fDays
Select @mAmount, 527228.52/3
此计算的结果是
175742.8281 175742.840000
这是否因为money和float实际上不是同一种数字数据而发生? Float是近似数字,Money是精确数字
答案 0 :(得分:0)
Money和Decimal是固定的数值数据类型,而Float是 近似数值数据类型。数学运算的结果 浮点数似乎无法预测,尤其是在 涉及舍入。一定要明白的意义 使用Float之前的差异!
此外,Money并没有提供超过Decimal的任何优势。如果是分数 最多5位小数的单位在您的货币或无效时无效 数据库模式,只需使用具有适当精度的Decimal 规模。
参考链接:http://www.sqlservercentral.com/Forums/Topic1408159-391-1.aspx
Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server?
答案 1 :(得分:0)
float [ (n) ]
其中n是用于以科学计数法存储浮点数的尾数的位数,因此,它决定了精度和存储大小。如果指定了n,则它必须是介于1和53之间的值.n的默认值为53。
当1-2中的n时,则精度为7位数。 当25-53中的n时,则精度为15位。
因此,在您的示例中,精度为7位数,因此第一部分@fdaysi * @mAmount
舍入结果为7位527228.5
。第二部分返回527228.5/3=175742.828
并将175742.828投放到Money
,结果为175742.8281
。所以FLOAT和REAL是近似数据类型,有时你会得到这样的惊喜。
DECLARE @f AS FLOAT = '29545428.022495';
SELECT CAST(@f AS NUMERIC(28, 14)) AS value;
结果是29545428.02249500200000
只有一个演员。