gpt4 book ai didi

sql - 为什么更新触发器在 SQL Server 中进行舍入?

转载 作者:行者123 更新时间:2023-12-02 04:31:21 25 4
gpt4 key购买 nike

我在名为“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 table

price 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com