SQL Проблема с функцией сервера - PullRequest
0 голосов
/ 11 апреля 2020

Я использую SSMS 2014, у меня возникла проблема с округлением столбца (FLOAT) в моем SampleTable. Если вы обратите внимание на округление ниже, 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

1 Ответ

0 голосов
/ 11 апреля 2020

Проблема в том, что 7.725 нельзя представить точно как число с плавающей запятой.

Другими словами, значение с плавающей запятой немного меньше, чем 7.725, и, поскольку оно ближе к 7.72, чем к 7.73, результат равен 7.72.

С другой стороны, 7.025 МОЖЕТ быть точно представлено, и это будет округлено до 7.03.

Если это имеет значение в вашем приложении, вы можете вместо этого использовать десятичный тип, который позволяет точное представление любого десятичного числа (с точностью до указанной).

...