There are two quite separate issues here:

1) How can one format a numeric value as a string in the localised
representation?

2) How can one parse a string in the localised representation into a numeric
value?

I believe that the standard C/C++ library provides no support whatever for
either operation.

On MS Windows, there is support for the first operation. The
misleadingly-named GetNumberFormat takes a numeric string in Western format
and produces a numeric string in localised format. One of its parameters is
a locale ID. The documentation isn't clear on whether it will actually
produce output in the alternate number system for the locale.
Experimentation is needed. I've found that the related function,
GetDateFormat, when working with the Hebrew calendar, will produce year,
month and day numbers in the non-positional Hebrew number system, so it's
possible that GetNumberFormat will do the same.

For the second operation, Windows provides VarI4FromStr and VarR8FromStr. I
think these functions are more limited in what they will accept. I have
found that VarDateFromStr cannot parse a date in the Hebrew calendar - so it
seems likely that these other functions cannot handle numbers formatted in a
localised representation.

If you find a good way of formatting or parsing using localised
representation, I'd be very interested in hearing about it. Please CC me off
the list, if this is deemed OT.

Thanks

- rick cameron

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] 
Sent: Friday, 15 March 2002 9:18
To: [EMAIL PROTECTED]
Subject: processing numeric strings


I've got a question I asked about on a couple of other lists, but didn't 
get much response, so I thought I'd try here.

One of our developers has asked me for input on a certain problem: "Do I 
need to be able to work with numbers represented using digits/numbering 
systems other than the European ("Arabic") decimal-based system, and if so 
how to I know what to do with things like U+0BF1 TAMIL NUMBER ONE 
HUNDRED?"

I could easily answer the first part: Yes. At least, I know that some 
users of the software will want to work with Thai or Arabic ("Indic") 
digits, and I'm pretty sure I know of users who will want to work with the 
Ethiopic numbering system. Things like Thai aren't hard to deal with since 
the numbering system works the same way as our decimal numbering system; 
it's just that different characters are used for the digits. But things 
like Ethiopic (or Tamil) are more involved since the numbering system 
works on different principles.

How are people dealing with presenting or interpreting numeric strings 
using systems such as Tamil, Ethiopic or even Thai, etc. digits, not all 
of which use numbering systems that work the same as the decimal system 
used in the west? (Note, this is *not* primarily about formatting issues 
such as decimal or group separators, though those are obviously also 
involved.) 

I'm not a C programmer so I don't know -- do C or C++ libraries provide 
functions for converting integer or other numeric data types into strings 
that allow one to select what script / numbering system to use? 

I'm pretty sure VB functions like Format$ or CLng only handle issues like 
decimal separators but not this; have I missed something?

I've looked in MSDN Win32 documentation, and I see that GetLocaleInfo can 
tell you the locale-specific equivalents for digits 0 to 9, but that 
doesn't give you a way to present integers using them or to interpret a 
string of these as a numeric value, and I haven't seen anything else in 
Win32 that does that. Is there anything that perhaps I've just not found? 
Does COM provide anything? 

(I got one response from the other two lists I mentioned which did tell me 
what I suspected: the .Net framework doesn't provide any support for this 
kind of thing.)

If the answers to all the above are negative (i.e. this functionality is 
neither built into compilers / libraries or into Windows), are there any 
open source implementations that deal with this? Does ICU handle this?

If people are resorting to writing their own algorithms, where are you 
getting information about how different numbering systems work?

Maybe my question should be to ask whether this *is* an issue for anyone 
else. The one response I got from the two other lists was from Michael 
Kaplan, who suggested that since software hasn't done this in the past, 
people have used decimal digits 0-9, with the result that there isn't 
really a current need for things like Tamil digits, and systems like 
Arabic are trivial do deal with. Are others finding there isn't much need 
for dealing with numbering systems that work differently from the Arabic 
decimal numbers?



- Peter


---------------------------------------------------------------------------
Peter Constable

Non-Roman Script Initiative, SIL International
7500 W. Camp Wisdom Rd., Dallas, TX 75236, USA
Tel: +1 972 708 7485
E-mail: <[EMAIL PROTECTED]>


Reply via email to