Windows Only Solution:
require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute(...)
Максимальная точность, разрешенная в SQL Server, составляет 38. Вы используете десятичное число (30,10). Максимальное значение составляет 99,999,999,999,999,999,999,9999999999, если вы разделите это число на 0,000000001, вы получите еще большее число, поэтому результирующий тип данных должен его вместить. Это приводит к потере точности.
Измените исходные типы данных на Decimal (20,10), и эта проблема не возникнет.
Полные правила, касающиеся типов данных (и того, как на них влияют математические операции):
Короче говоря, используйте приведение, чтобы гарантировать результаты. Когда вы назначаете @x и @y буквальным значениям, они, вероятно, принимают точность этих литералов. Это помогает объяснить, почему деление на эти ценности не оправдывает ваших ожиданий.