【问题标题】:sql server round function not working wellsql server round 函数不能正常工作
【发布时间】:2012-02-27 04:30:02
【问题描述】:

我正在使用 sql server 2000 并面临圆形函数问题,如以下语句工作正常。

SELECT ROUND(5 * 7.83, 1)

结果将是 39.2

但是当我从表中获取这些值时,它给出了 39.1,这意味着它会截断并且不会四舍五入。

SELECT ROUND(rate * qty, 1) 
  FROM tbl

结果将是 39.1

rateqty 列数据类型是浮点数。在qty 中插入5,在rate 中插入7.83,然后检查。我该如何解决?

【问题讨论】:

  • select rate,qty from tb1 的输出是多少?

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

将表格值转换为实数,

SELECT ROUND(convert(real,rate)*convert(real,qty),1)

【讨论】:

    【解决方案2】:

    您的示例只是查询不反映所涉及的数据类型。

    试试这两个:

    SELECT ROUND(5 * 7.83, 1)
    SELECT ROUND(cast(5 as float) * cast(7.83 as float), 1)
    

    第二个匹配您的表数据类型。浮点数据类型不适用于精确的十进制计算,请改用十进制类型。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多