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

标签 sql sql-server casting triggers sql-update

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

相关文章:

mysql - SQL 查询的令人惊讶的计时统计数据

sql - 如何使用cte查询和解析相邻列表层次结构?

mysql - SQL 查询、多表上的 AVG 和 COUNT

sql - LINQ 和 Lambda 表达式等效于 SQL In

mysql - 额外提交不会给我任何错误

mysql - 如何在同一个表的新列中连接主键(id)和日期?(MySQL)

c# - 选择平台 C#/MsSql 或 Php/Mysql 或 JSP 或什么?

POSTGRESQL:如何将日期转换为整数?

iphone - 在 Objective-C 中比较 float 的奇怪问题

Java - 从接口(interface)到实现的动态类转换