Кажется, это классический случай ошибок округления.
Проверьте этот код:
declare @val float = convert(real, '1.06') * 200;
select @val; --211,999984741211
Вы можете рассмотреть преобразование в float
вместо real
, но даже тогда может случиться так, что вы получите ошибки округления.
Вы можете рассмотреть возможность преобразования в decimal
или numeric
, так как эти типы ведут себя несколько иначе в отношении округления. Но эти типы используют больше памяти и работают медленнее, чем real
и float
.
. Возможно, вы также захотите проверить, есть ли функции округления (например, ROUND
и FLOOR
) может быть полезным для вас.
С точки зрения дизайна, почти всегда будет лучшим выбором хранить числовые данные в числовых типах вместо строк. (Числовые данные предназначены для использования в целях выполнения расчетов. Кроме того, преобразование значения цифры 1027 * в строку технически проще и более гибко, чем преобразование строки в числовое значение.)
Вы должны исследовать эти (и другие?) Возможные решения, а затем выбрать, какое решение лучше всего подойдет для вашей проблемы.