Post Reply 
will this always return the current system decimal separator? (SOLVED)
02-05-2018, 08:32 AM (This post was last modified: 02-05-2018 11:23 PM by StephenG1CMZ.)
Post: #1
will this always return the current system decimal separator? (SOLVED)
I am not aware of a built-in "get the current decimal separator" function and I needed one because I have a program in which the system calls usually deliver "0." but ocassionally return "0".

So, I needed to find out whether to add a "." or a ",".

This seems to work - but could there be a "fix 0" mode which might hide the separator?
Code:

 EXPORT DecSepNow()
 //RETURN current system decimal separator
 BEGIN
  LOCAL ST:=STRING(π);//ANY REAL
  LOCAL DOT:=INSTRING(ST,".");
  LOCAL COM:=INSTRING(ST,",");
 
  RETURN MID(ST,MAX(DOT,COM),1);
 END;
Or is there a better way?

Stephen Lewkowicz (G1CMZ)
Visit this user's website Find all posts by this user
Quote this message in a reply
02-05-2018, 09:54 AM (This post was last modified: 02-05-2018 10:21 AM by Didier Lachieze.)
Post: #2
RE: will this always return the current system decimal separator?
(02-05-2018 08:32 AM)StephenG1CMZ Wrote:  This seems to work - but could there be a "fix 0" mode which might hide the separator?

It doesn't work in FIX 0 as in this number format mode STRING(π) returns "3".

Instead, you can use the Home Settings variable HSeparator, this should work whatever the number format:

Code:
EXPORT DecSepNow()
//RETURN current system decimal separator
BEGIN
  RETURN IFTE((HSeparator MOD 9)<4,".",",");
END;

Another way of doing it based on your program would be to force the number of digits after the decimal separator:

Code:
EXPORT DecSepNow()
//RETURN current system decimal separator
BEGIN
 LOCAL ST,ND:=HDigits;
 HDigits:=1;     //Set number of digits after the decimal separator to 1
 ST:=STRING(π);  //Set ST to "3.1" or "3,1"
 HDigits:=ND;    //Restore number of digits after the decimal separator
 RETURN ST(2,1); //Return second character of ST
END;
Find all posts by this user
Quote this message in a reply
02-05-2018, 10:35 AM
Post: #3
RE: will this always return the current system decimal separator?
Of the two, I much prefer your version reading Hseparator. Thank you.
I try to avoid solutions that change modes and then restore them - unless there is no other way - as there is always the risk that the user will interrupt a program at just the wrong time - and then wonder what has changed the settings.

Stephen Lewkowicz (G1CMZ)
Visit this user's website Find all posts by this user
Quote this message in a reply
02-06-2018, 02:27 AM
Post: #4
RE: will this always return the current system decimal separator? (SOLVED)
(02-05-2018 10:35 AM)StephenG1CMZ Wrote:  Of the two, I much prefer your version reading Hseparator. Thank you.
I try to avoid solutions that change modes and then restore them - unless there is no other way - as there is always the risk that the user will interrupt a program at just the wrong time - and then wonder what has changed the settings.

Even worse are programs that change modes and don't restore them!

Tom L

Ducator meus nihil agit sine lagunculae leynidae accedunt
Find all posts by this user
Quote this message in a reply
02-06-2018, 04:21 AM
Post: #5
RE: will this always return the current system decimal separator? (SOLVED)
Oh! this is something useful to identify when using EXPR()

Viga C | TD | FB
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)