Проблема в том, что результат POWER(10, (82.6 / 20))
равен 13489
, что далеко от точного значения. Это связано с тем, что POWER
возвращает тип ввода, который в данном случае равен INT
. Это не особенно полезно, но является задокументировано [1] .
Исправление - сделать первый аргумент FLOAT
, который также выводит остальную часть выражения в строку. Самый простой способ сделать это - прикрепить e
, поэтому:
SELECT ((1000000000*0.00002 * POWER(10e, (82.6 / 20))) / 1000000000)
дает 0.269792576518331
. Если вы предпочитаете, CAST(10 AS FLOAT)
также подойдет. Использование 10.0
будет не делать, потому что этот литерал имеет тип DECIMAL(3,1)
, а POWER(10.0, (82.6/20))
равен 13489.6
, что не намного лучше, чем то, с чего мы начали.
[1]: документация, однако, неверна, когда говорится, что типом вывода является DECIMAL(2,0)
, если типом ввода является: в моем тесте передача DECIMAL
любой точности приводит к DECIMAL
точность 38, а не оригинальная точность. Есть и другие аномалии. Я отправил запрос на удаление, чтобы исправить это.