In fact a DBF stores N(20) fields as chars in the DBF, you can check that with a hew editor (eg HexEdit.app from Home()+"Tools\Hexedit")
But no the numeric field is handled as a number, which VFP alsway handles as a float (double) anyway (Help says in memory it's 8bytes, that's what a double variable takes). The limitation really is 16 digits, eg try this:
Code:
create cursor curTest (nNumeric N(20))
insert into curTest Values (12345678901234567890)
Browsing this you'll see 1.234567891234E+19 and when selecting the field it displays 12345678901234000000. This even only considers 14 decimals accurracy.
Code:
create cursor curTest (nNumeric N(19))
insert into curTest Values (1234567890123456789)
Browsing that shows 1234567890123457000
The weakness of this is the memory representation of the number, the N(19) and N(20) fields are capable to store 19 or 20 digits exact, but the digits get lost on the way, as the numeric literal 12345678901234567890 in the code (which actually is text) is lost on the way either already when compiling or when the Insert-SQL is executed, I don't know the exact culprit here.
In fact you have a limitation at the memory level already and thus N(16) is the maximum field that really makes sense. Storing larger numbers, eg telephone numbers or some identifier of a product etc. you better use Character fields.
If somehow you managed to get higher pricision numbers into a N(20) field you should see that in a hexedit of the DBF file. It may be possible to extract the digits with MOD, eg MOD(numericfield,10) will give you the lowest digit.
Bye, Olaf.