HP Forums

Full Version: will this always return the current system decimal separator? (SOLVED)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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?
(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;
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.
(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!
Oh! this is something useful to identify when using EXPR()
Reference URL's