Regarding storage size for a number column, Oracle gives the formula at http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10743/datatype.htm #sthref3808 "the column size in bytes for a particular numeric data value NUMBER(p), where p is the precision of a given value, can be calculated using the following formula: ROUND((length(p)+s)/2))+1 where s equals zero if the number is positive, and s equals 1 if the number is negative." I quoted 10g documentation but it's the same since at least 8i on. There're a few mistakes in this formula and its interpretation. (1) Parentheses don't match. We can drop the rightmost closing parenthesis: ROUND((length(p)+s)/2)+1 Alternatively, we can drop the parenthesis to the right of scale, with a totally different calculation though: ROUND((length(p)+s/2))+1 But I don't think this is what they intended. The double opening and closing parentheses become unnecessary. (2) Since p is already the precision, defined as "total number of digits", length(p) makes no sense. E.g., for 123.1, p is 4; length(p)=length(4) would be 1. We should replace length(p) with just p. (Length(the_number) is not right either since it's 1 more than precision if the number contains a decimal point.) Now the formula looks like: ROUND((p+s)/2)+1 (3) How can it be that "s equals zero if the number is positive"? For 123.1, s, defined as "number of digits to the right of the decimal point" earlier in documentation, is clearly 1. (4) How can it be that "s equals 1 if the number is negative"? Regarding (3) and (4), there's a sentence just above the formula "Negative numbers include the sign in their length". I think the documentation writer accidentally dropped the last part in the formula, "+sign". So it really should look like: ROUND((p+s)/2)+1+sign where sign equals zero if the number is positive, and sign equals 1 if the number is negative. However, the modified formula still doesn't take into account of exponent. vsize(110) is 3 while vsize(1100) is 2, because they're 1.1 x 10^2 and 1.1 x 10^3, respectively. But applying the (modified) formula would yield the same value, ROUND((3+0)/2)+1+0=3 and ROUND((4+0)/2)+1+0=3, respectively.