Я не думаю, что вы можете получить именно то, что вы хотите, округляя. Округление числа с плавающей точкой не будет работать точно и надежно: что бы вы ни делали, вы будете пытаться применить десятичное округление к двоичному числу, и это не будет точным для чего-либо, кроме степени 2.
Вы можете получить точные сохраненные в базе данных десятичные представления произвольных субцелых величин, используя десятичный тип данных, специально разработанный для этой цели. Эти типы данных обычно используют некоторую форму упакованного десятичного хранилища (так менее эффективно, чем двоичное), где, например, 2009 хранится как 0x2009
.
Что произойдет, если вы используете функцию CONVERT ? Вы пытались сделать запрос, используя что-то вроде этого?
CONVERT(money, your_float_column)
В долгосрочной перспективе, я думаю, я бы подумал о том, чтобы добавить в мою таблицу столбец с нужным типом и сохранить его значение с помощью триггеров пост-вставки / обновления, а затем со временем переключить весь мой код на использование этого столбца.
Тогда я выслеживал и наказывал тех, кто считал, что хранить деньги в поплавке - хорошая идея ...