我正在使用sql server 2000并面临圆形功能问题,如下面的语句正常工作。
SELECT ROUND(5 * 7.83, 1)
结果将是39.2
但是当我从表中得到这些值时,它会得到39.1,这意味着它会截断并且不会向上舍入。
SELECT ROUND(rate * qty, 1)
FROM tbl
结果将是39.1
rate
和qty
列数据类型为float。在qty
中插入5,在rate
中插入7.83,然后进行检查。我怎么解决它?
答案 0 :(得分:1)
将表值转换为实数,
SELECT ROUND(convert(real,rate)*convert(real,qty),1)
答案 1 :(得分:1)
您的示例简单查询不反映所涉及的数据类型。
尝试这两个:
SELECT ROUND(5 * 7.83, 1)
SELECT ROUND(cast(5 as float) * cast(7.83 as float), 1)
第二个匹配您的表数据类型。 Float数据类型不适用于精确的十进制计算,而是使用十进制类型。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
在不损失正常数字的精度的情况下,您可以动态地转换为十进制,以强制人类可理解的十进制算术,例如。
SELECT ROUND(cast(rate as decimal(10,5)) * cast(qty as decimal(10,5), 1)
FROM tbl