HP Forums
will this always return the current system decimal separator? (SOLVED) - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: will this always return the current system decimal separator? (SOLVED) (/thread-10104.html)



will this always return the current system decimal separator? (SOLVED) - StephenG1CMZ - 02-05-2018 08:32 AM

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?


RE: will this always return the current system decimal separator? - Didier Lachieze - 02-05-2018 09:54 AM

(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;



RE: will this always return the current system decimal separator? - StephenG1CMZ - 02-05-2018 10:35 AM

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.


RE: will this always return the current system decimal separator? (SOLVED) - toml_12953 - 02-06-2018 02:27 AM

(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!


RE: will this always return the current system decimal separator? (SOLVED) - Carlos295pz - 02-06-2018 04:21 AM

Oh! this is something useful to identify when using EXPR()