У меня есть следующий набор вычислений в excel, который я хочу использовать в хранимой процедуре.Точность с плавающей запятой SQL, ограниченная 6 цифрами
Excel
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
В SQL я делаю следующее:
declare @a decimal(18,15) = 45/448.2
declare @b decimal(18,15) = [email protected]
declare @c decimal(18,15) = [email protected]
declare @d decimal(18,15) = @c * 448.2
Я также попытался запустить расчет в одной строке
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
когда я возвращаю значения SQL дает мне следующее:
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
Я попытался настроить точность десятичных знаков в SQL, но я ничего не меняю, он возвращает только первые 6 цифр десятичной дроби.
Обеспечивает ли Excel какую-либо оптимизацию при запуске формулы?
Любые идеи?
Try, скажем, 'Выбор 45/CAST (448.2 AS DECIMAL (18,1)) '. [Ссылки здесь] (http://stackoverflow.com/a/5385417/73226) сообщают вам правила для результирующего типа данных деления. –
@MartinSmith, который дает мне более полное десятичное значение для @a, хотя мой ответ 45.000000000000085 вы можете объяснить, почему? – ScampDoodle
Это объясняется в двух ссылках предыдущего ответа, которые я слишком ленился, чтобы воспроизвести выше. 'e1/e2 дает p = p1 - s1 + s2 + max (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)'. Если 'p' будет'> 38', '' '' усекается на '6' –