我在名为“Item”的表中有一个商品的价格是 1.5750,只要价格发生变化,它就会更新到另一个表
这是我的更新触发器
update Ss
set price = cast( i.Price * 100 as int)
from Updateitems ss
inner join inserted i on i.ItemNo = ss.ItemNo
在项目表中,价格将为 1.5750
更新后,价格在 UpdateItem
表上显示为 158。
但是当我像这样直接执行查询时 select cast( 1.5750 * 100 as int)
输出显示 157
为什么要更新 158?
哪个是正确的?
注意:
Price datatype is money on
item
tableprice datatype is varchar in
Updateitems
table
最佳答案
您将十进制值 1.5750 乘以 100,这是正确的,得到 157.50,但随后您将其转换为 int
数据类型,整数数据类型,只能保存整数值,因此当它们被赋予十进制值时,它们四舍五入到(通常)最接近的整数,这就是为什么你看到它返回为 158。
如果你想保留小数值,你可以将其转换为小数;
select cast( 1.5750 * 100 as decimal(5,2))
decimal(5,2)
允许您在小数点后有 2 个数字(通常用于货币值),并且仍然保留小数点前的 3 个数字。
关于sql - 为什么更新触发器在 SQL Server 中进行舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497075/