sql - Large numbers in Oracle -


why works

select 10000000000000000000000000000000000000000*9 dual --41 digit number 

output:

90000000000000000000000000000000000000000 

but gives uncorrect result

select 10000000000000000000000000000000000000000+1 dual --41 digit number 

output:

10000000000000000000000000000000000000000 

i cant understand why oracle can multiply large number 9 fail add 1 !

as comments hinting at, hitting limits of oracle's number precision. in other words, oracle has limit of significant digits can handle (even in memory) before being forced perform rounding , start losing precision, observed.

although example makes behavior seem counter-intuitive, make sense if illustrate seeing how translate these numbers scientific notation.

so number 10000000000000000000000000000000000000000, can represented concisely in following form: 1e+40.

however, in order represent number 10000000000000000000000000000000000000001, there no concise way represent that. if don't want lose precision, in scientific notation, shortest way represent 10000000000000000000000000000000000000001e+0. takes lot more space simple 1e+40.

in contrast, number 90000000000000000000000000000000000000000 can represented concisely so: 9e+40.

so yes, last number larger previous one, oracle has no problem representing precision because doesn't have many significant digits.


Comments