Десятичное число SQL-сервера (30,10) проигрывающие последние 2 десятичных числа

Windows Only Solution:

require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute(...)

Shell выполняются на MSDN

13
задан Michiel de Mare 15 October 2009 в 23:03
поделиться

2 ответа

Максимальная точность, разрешенная в SQL Server, составляет 38. Вы используете десятичное число (30,10). Максимальное значение составляет 99,999,999,999,999,999,999,9999999999, если вы разделите это число на 0,000000001, вы получите еще большее число, поэтому результирующий тип данных должен его вместить. Это приводит к потере точности.

Измените исходные типы данных на Decimal (20,10), и эта проблема не возникнет.

Полные правила, касающиеся типов данных (и того, как на них влияют математические операции):

Полные правила здесь

23
ответ дан 1 December 2019 в 22:23
поделиться

Короче говоря, используйте приведение, чтобы гарантировать результаты. Когда вы назначаете @x и @y буквальным значениям, они, вероятно, принимают точность этих литералов. Это помогает объяснить, почему деление на эти ценности не оправдывает ваших ожиданий.

-1
ответ дан 1 December 2019 в 22:23
поделиться