Só pra explicar: segundo a documentação, em Oracle um literal numérico é do tipo NUMBER
, que é um tipo que não tem os problemas de imprecisão dos números de ponto flutuante. Por isso o cálculo fica exato.
Mas só como curiosidade, se você colocar o sufixo d
, os números passam a ser tipos de ponto flutuante, e aí os problemas de imprecisão aparecem:
SELECT to_char(128.23d - (118.23d + 10.00d), '9.9999999999999999999') result FROM dual;
Formatei com várias casas decimais, senão ele só ia mostrar -0
. Resultado:
RESULT
----------------------
-.0000000000000284217
Só pra mostrar a diferença, veja sem o sufixo d
:
SELECT to_char(128.23 - (118.23 + 10.00), '9.9999999999999999999') result FROM dual;
Resultado:
RESULT
----------------------
.0000000000000000000