У нас есть ряд полей, определяемых как числовые (38,20) - поскольку данные перемещаются в ORACLE db с этой шкалой/точностью.Работа с десятичной точностью
При выполнении расчетов округление имеет тенденцию происходить между 12 и 14 знаками после запятой (в зависимости). Я тестировал различные комбинации поплавков/десятичных знаков в надежде сохранить точность и сохранить обратно в числовые (38,20)
, например.
введите код здесь
declare @dtest20 decimal(38,20) = cast(1.44444444441234567892 as decimal(38, 20))
declare @ftest20 float = cast(1.44444444441234567892 as float)
declare @f100 float = cast(100.0 as float)
declare @d100 decimal(38,20) = cast(100.0 as decimal(38,20))
select @dtest20 * @d100 as 'dtest20 x d100'
, cast(@dtest20 * @d100 as decimal(38,20)) as 'dtest20 x d100'
, @ftest20 * @f100 as 'ftest20 x f100'
, cast(@ftest20 * @f100 as decimal(38,20)) as 'ftest20 x f100'
dtest20 x d100 dtest20 x d100 ftest20 x f100 ftest20 x f100 144.444444 144.44444400000000000000 144.444444441235 144.44444444123457000000
Я знаю, что это действительно MS-SQL вещь, но есть ли работа вокруг/рекомендации для выполнения вычислений на больших точных цифр и избежать непреднамеренного округление?
Спасибо!
SQL не является подходящей платформой для выполнения точных вычислений, но, как правило, вы должны хранить значения в виде десятичных знаков, но выполнять вычисления с использованием поплавков. – Jaco
@JacodeGroot - «... хранить значения как десятичные числа, но выполнять вычисления с использованием поплавков» - мне действительно нужно задать вопрос, почему вы хотите сохранить результаты в DECIMAL, а затем выбрасывайте точность и точность с помощью FLOAT в вычислениях? (͏the͏ anći͜e͡nt ̷evìl͢ ҉a͝w̴a̸k͢en̵s͞.͜..̡) Это безумие! (H̷ę̛ ̶͝c̵̸o͝m҉̸͜e̷͝͠s..͝.͝) ͠ Отвернитесь! Вернуться!! C̢̢҉͏҉͏҉͏̷̛͜҉̡͝͠҉̡͝͠҉̡͝͠҉̡͝͠҉̡͝͠҉̶̶̶̶̴̶̴̶̵̡̨̨̨̨̢̨̢̨̛̛̛̛̛̛̛̛͘͘̕͜͜͜͟͟͜͝͠͞͞͞͞͞͞͞͠͠ ̢͟͜͟ Бегите от неимоверного террора в FPU !!! ĮĮ̵̧! ̴̧̕ ̶̛Į̵̵̵a̡͜͠! ͡ ̡̢̛͘C̷̨̡͞t͏͝҉҉h͜u̷̶l̸h̕͞ù͘͟͠! ̸! ̵̧̛ ҉̕͢͞҉C̵̡͘͢͞t͝҉͜h͟u̵͘l̢̡h̡̡͢͜͢͜ư̶̵ ̵͟͟f̷̶͞͝h̸̛͜͠҉ţ̷a̸̛̛͞g̸̨n͏҉̸̨! ҉! ̵! ͡ –
Если вы запустили это на MS SQL, почему он помечается 'mysql'? – dnoeth