Десятичное значение 0,00750 - это значение 7,4999999999999997E-3 при приведении к плавающей точке (хотя SSMS покажет 0,0075). Используя SQLCMD, вы можете увидеть фактическое значение:
sqlcmd -Q"DECLARE @c float = 0.00750;SELECT @c as float,ROUND(@c, 3) AS rounded;"
Результаты:
float rounded
------------------------ ------------------------
7.4999999999999997E-3 7.0000000000000001E-3
Если вы измените уровень совместимости базы данных на 120 (SQL 2016) базы данных (предварительно), Управляемый экземпляр базы данных SQL Azure или база данных SQL Azure):
ALTER DATABASE YourDatabase SET COMPATIBILITY_LEVEL = 120;
и повторите тот же запрос, тогда результат будет неправильно округлен, как ваш экземпляр SQL 2016:
float rounded
------------------------ ------------------------
7.4999999999999997E-3 8.0000000000000002E-3
Помнитеэто число с плавающей точкой является приблизительным и не может точно представлять все десятичные значения. Таким образом, база данных SQL Azure - правильное поведение округления, но поведение можно контролировать с помощью уровня совместимости базы данных, чтобы при необходимости обеспечить обратную совместимость.