SQL 服务器循环功能问题
SQL Server Round Function Issue
我正在使用 SSMS 2014,我在 SampleTable
中对列 (FLOAT
) 进行四舍五入时遇到问题。如果您注意到下面的四舍五入,7.725 应该是 7.73,但输出是 7.72,这是错误的。希望你能帮我解决这个问题。
代码
SELECT date, ROUND(timeelapsed, 2) AS RoundedValue, timeelapsed
FROM SampleTable
输出
date RoundedValue timeelapsed
----------------------------------------
2020-02-03 2.78 2.781944445
2020-02-05 0.43 0.433333333
2020-02-06 8.67 8.670833334
2020-02-07 5.78 5.783055556
2020-02-08 2.43 2.431111111
2020-02-09 7.72 7.725
2020-02-10 4 3.996388889
问题是 7.725 不能精确表示为浮点数。
换句话说,浮点值略小于 7.725,由于它比 7.73 更接近 7.72,所以结果是 7.72。
另一方面,7.025 可以精确表示,这将四舍五入为 7.03。
如果这在您的应用程序中很重要,您可以考虑改用 decimal 类型,它允许精确表示任何十进制数(达到指定的精度)。
我正在使用 SSMS 2014,我在 SampleTable
中对列 (FLOAT
) 进行四舍五入时遇到问题。如果您注意到下面的四舍五入,7.725 应该是 7.73,但输出是 7.72,这是错误的。希望你能帮我解决这个问题。
代码
SELECT date, ROUND(timeelapsed, 2) AS RoundedValue, timeelapsed
FROM SampleTable
输出
date RoundedValue timeelapsed
----------------------------------------
2020-02-03 2.78 2.781944445
2020-02-05 0.43 0.433333333
2020-02-06 8.67 8.670833334
2020-02-07 5.78 5.783055556
2020-02-08 2.43 2.431111111
2020-02-09 7.72 7.725
2020-02-10 4 3.996388889
问题是 7.725 不能精确表示为浮点数。
换句话说,浮点值略小于 7.725,由于它比 7.73 更接近 7.72,所以结果是 7.72。
另一方面,7.025 可以精确表示,这将四舍五入为 7.03。
如果这在您的应用程序中很重要,您可以考虑改用 decimal 类型,它允许精确表示任何十进制数(达到指定的精度)。