两个计算式看起来一样,但是结果不一样 DECLARE @TAX_RATE FLOAT SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) 结果:-60select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE))结果:-59上面两个计算式看起来一样,但是结果为什么不一样。请大家指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 颜色给弄坏了。重发一下。DECLARE @TAX_RATE FLOAT SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59上面两个计算式看起来一样,但是结果为什么不一样。请大家指点。 float 类型计算出来应该保留小数位数的吧59.999int类型是忽略掉小数位的所以肯定是59 难道是SQLServer 自己算法的问题?我这边结果是不一样的 CONVERT向下取整,将小数部分拿掉了。 INT把小数点后面的位数扔了,LZ可以用select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))或者select CAST(CONVERT(NUMERIC(19,6),-100+(840*(@TAX_RATE-1)/@TAX_RATE)) AS INT)代替 另外 我用CAST() 实验了下 也是去掉了小数点部分 DECLARE @TAX_RATE FLOAT SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) 的结果是不含有小数位的(小数是零),所以至于小数位是被拿掉了还是怎么了,应该没有关系吧。另外,select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))---->结果:-60这两个结果也不一样,奇怪。 DECLARE @TAX_RATE FLOAT SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE)第一个前面-100是整数,加后是整数的 DECLARE @TAX_RATE FLOAT SET @TAX_RATE = 1.05select @TAX_RATEselect -100+(840*(@TAX_RATE-1)/@TAX_RATE)select CONVERT(float,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))----> ----------------------------------------------------- 1.05(所影响的行数为 1 行) ----------------------------------------------------- -59.999999999999964(所影响的行数为 1 行) ----------------------------------------------------- -59.999999999999964(所影响的行数为 1 行) --------------------- -60(所影响的行数为 1 行)这样应该清楚了 我的电脑运行结果和你的不一样。跟版本有关系吗?我的是sqlServer2005。 float是浮点数,有精度损失DECLARE @TAX_RATE numeric(38,8)SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-60 问一个简单的查询语句 超级简单的查询语句~~~~ 自己写的一个split的函数,用在sql语句中出现的问题 为什么记录显示不完整? for xml 查询显示不全的问题 sql语句 在SQL SERVER2000中关于获得当前时间的问题,请各位帮帮忙.谢谢 关于触发器的问题,请各位大虾帮助,小弟不胜感激 安装原建数据库到SQL Server 7.0中 请问如何将多个完全备份的数据还原 问个关于不同数据库间导入数据的问题 关于分组排序问题
DECLARE @TAX_RATE FLOAT
SET @TAX_RATE = 1.05
select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60
select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59上面两个计算式看起来一样,但是结果为什么不一样。请大家指点。
计算出来应该保留小数位数的吧
59.999int类型是忽略掉小数位的
所以肯定是
59
难道是SQLServer 自己算法的问题?
我这边结果是不一样的
select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))
或者
select CAST(CONVERT(NUMERIC(19,6),-100+(840*(@TAX_RATE-1)/@TAX_RATE)) AS INT)
代替
SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) 的结果是不含有小数位的(小数是零),所以至于小数位是被拿掉了还是怎么了,应该没有关系吧。另外,
select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59
select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))---->结果:-60这两个结果也不一样,奇怪。
SET @TAX_RATE = 1.05select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE)第一个前面-100是整数,加后是整数的
SET @TAX_RATE = 1.05
select @TAX_RATE
select -100+(840*(@TAX_RATE-1)/@TAX_RATE)
select CONVERT(float,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-59
select CONVERT(NUMERIC(19,0),-100+(840*(@TAX_RATE-1)/@TAX_RATE))---->
-----------------------------------------------------
1.05(所影响的行数为 1 行)
-----------------------------------------------------
-59.999999999999964(所影响的行数为 1 行)
-----------------------------------------------------
-59.999999999999964(所影响的行数为 1 行)
---------------------
-60(所影响的行数为 1 行)
这样应该清楚了
SET @TAX_RATE = 1.05
select -100+(840.0*(@TAX_RATE-1)/@TAX_RATE) ---->结果:-60
select CONVERT(INT,-100+(840*(@TAX_RATE-1)/@TAX_RATE)) ---->结果:-60