34,870
社区成员




我的视图中的“发货款”字段是decimal:
按说应该是四舍五入的,但是运行后:
计算后没有经过cast的原值是:201258.675
而被cast函数处理后,应该四舍五入为:201258.68 的,但实际却是:201258.67。四舍五入失灵?
我刚刚又查了下,发现这个情况还不少,有的进位,有的却不进,奇怪。见下图(红框中是没有进位的):
DELPHI中ROUND也是一样
应该是系统的四舍五入算法为“银行家”算法,具体去看我BLOG吧。所谓的奇进偶不进,如果要得到正常结果应该要自己写算法
cast根本不是做数值位数转换,只是做数据类型相互转换。
你应该用convert()。
或者用Round()。
用字面量转是没有问题的,但如果是从列里取,就不行
DECLARE @d FLOAT
SET @d=201258.675
SELECT @d,CAST(@d AS DECIMAL(15,2)),CAST( CAST(@d AS DECIMAL(15,8)) AS decimal(15,2))
分别输出 201258.675 201258.67 201258.68
SELECT CAST('201258.675' AS NUMERIC(18,2))的结果是201258.68啊,会不会是语句哪里写错了