[Scilab-users] printf bug?

Stéphane Mottelet stephane.mottelet at utc.fr
Mon Oct 20 18:19:06 CEST 2014


Hello,

I think that the decimal separator is controlled by the LC_NUMERIC or 
the LANG environment variable. With my local install (LANG=fr_FR.UTF-8) 
I get

-->msprintf("%0.1f",1.2345)
  ans  =

  1.2

S.

Le 20/10/2014 17:48, Stefan Du Rietz a écrit :
> Hello,
> look here:
>
> -->x = 1.2345
>  x  =
>     1.2345
> -->msprintf("%0.1f", x)
>  ans  =
>  1,2
> -->string(0.1 * floor(10 * x))
>  ans  =
>  1.2
>
> This could cause disastrous results, e.g. when written to files ...
>
> Regards
> Stefan
>
>
> On 2014-08-02 22:35, Stefan Du Rietz wrote:
>> With "Scilab" here, I mean Scilab 5.5.0.
>>
>> On 2014-08-02 22:30, Stefan Du Rietz wrote:
>>> Thank you, Leon,
>>> it confirms that Scilab 5.4.1 handles it correctly.
>>>
>>> But when I have LC_NUMERIC="en_DK.utf8" which means decimal comma, see
>>> below, Scilab is in error:
>>> -->msprintf("%0.2f", %pi)
>>>   ans  =
>>>   3,14
>>> -->msprintf("%0.2f", 3.1416)
>>>   ans  =
>>>   3,14
>>>
>>> Compare the correct handling in Python:
>>>  >>> "Pi with two decimals is %0.2f" % 3.1416
>>> 'Pi with two decimals is 3.14'
>>>
>>> Can any of the developers comment on this, or shall I report a bug?
>>>
>>> Regards
>>> Stefan
>>>
>>> stefan at Asus1:~$ uname -a
>>> Linux Asus1 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC
>>> 2014 i686 i686 i686 GNU/Linux
>>> stefan at Asus1:~$ locale
>>> LANG=en_GB.UTF-8
>>> LANGUAGE=en_GB:en
>>> LC_CTYPE="en_DK.utf8"
>>> LC_NUMERIC="en_DK.utf8"
>>> LC_TIME="en_DK.utf8"
>>> LC_COLLATE="en_DK.utf8"
>>> LC_MONETARY="en_DK.utf8"
>>> LC_MESSAGES="en_DK.utf8"
>>> LC_PAPER="en_DK.utf8"
>>> LC_NAME="en_DK.utf8"
>>> LC_ADDRESS="en_DK.utf8"
>>> LC_TELEPHONE="en_DK.utf8"
>>> LC_MEASUREMENT="en_DK.utf8"
>>> LC_IDENTIFICATION="en_DK.utf8"
>>> LC_ALL=en_DK.utf8
>>>
>>>
>>> On 2014-07-30 07:25, Leon Bevc wrote:
>>>> Here is output from openSuse 13.1 and Scilab 5.4.1:
>>>> ---------------------------
>>>> lebevc at linux-xkf0:~> uname -a
>>>> Linux linux-xkf0.site 3.15.3-1.g42bf625-desktop #1 SMP PREEMPT
>>>> Wed Jul 2 09:23:08 UTC 2014 (42bf625) x86_64 x86_64 x86_64 GNU/Linux
>>>> ---------------------------
>>>> lebevc at linux-xkf0:~> locale
>>>> LANG=sl_SI.UTF-8
>>>> LC_CTYPE="sl_SI.UTF-8"
>>>> LC_NUMERIC="sl_SI.UTF-8"
>>>> LC_TIME="sl_SI.UTF-8"
>>>> LC_COLLATE="sl_SI.UTF-8"
>>>> LC_MONETARY="sl_SI.UTF-8"
>>>> LC_MESSAGES="sl_SI.UTF-8"
>>>> LC_PAPER="sl_SI.UTF-8"
>>>> LC_NAME="sl_SI.UTF-8"
>>>> LC_ADDRESS="sl_SI.UTF-8"
>>>> LC_TELEPHONE="sl_SI.UTF-8"
>>>> LC_MEASUREMENT="sl_SI.UTF-8"
>>>> LC_IDENTIFICATION="sl_SI.UTF-8"
>>>> LC_ALL=
>>>> ---------------------------
>>>> lebevc at linux-xkf0:~>  printf "%0.2f\n" 3.1416
>>>> bash: printf: 3.1416: invalid number
>>>> 0,00
>>>> lebevc at linux-xkf0:~> printf "%0.2f\n" 3,1416
>>>> 3,14
>>>>
>>>> //-----Scilab---------------------
>>>>
>>>> -->ver
>>>> Scilab Version:   5.4.1.1364497457
>>>>
>>>> -->x = 0.12345
>>>>   x  =
>>>>      0.12345
>>>>
>>>> -->xstr = msprintf("%0.2f", x)
>>>>   xstr  =
>>>>   0.12
>>>>
>>>>
>>>> 2014-07-29 22:41 GMT+02:00 Stefan Du Rietz <sdr at durietz.se
>>>> <mailto:sdr at durietz.se>>:
>>>>
>>>>     Leon, Can you please try it with Scilab 5.4.1 under openSUSE? And
>>>>     can you show its Bash output from
>>>>     $ locale
>>>>
>>>>     When I was running Scilab 5.4.1 under Xubuntu 12.04, printf worked
>>>>     OK, but also in Bash. So the question is: Why do you now get
>>>>     different results in Scilab and Bash?
>>>>
>>>>     And *the important point*: Why should a mathematics program handle
>>>>     inputs differently from outputs?
>>>>
>>>>     If one should handle decimal separators differently depending on
>>>>     the local language, it should be done consistently (as in Bash,
>>>>     even if I don't like it)!
>>>>
>>>>     One could of course have special functions or arguments to present
>>>>     numbers in specific local formats.
>>>>
>>>>     Stefan
>>>>
>>>>
>>>>
>>>>     On 2014-07-29 19:41, Leon Bevc wrote:
>>>>
>>>>         Strange...
>>>>
>>>>         In this case I got the same result as you on Xubuntu and
>>>> openSUSE:
>>>>
>>>>         [ xUbuntu 14.04.1 - 32bit / Scilab 5.5.0 / LANG=sl_SI.UTF-8 ]
>>>>         lebevc at book-PC:~$ printf "%0.2f\n" 3.1416
>>>>         bash: printf: 3.1416: neveljavno število
>>>>         0,00
>>>>         lebevc at book-PC:~$ printf "%0.2f\n" 3,1416
>>>>         3,14
>>>>
>>>>
>>>> ------------------------------__------------------------------__---------- 
>>>>
>>>>
>>>>
>>>>         [ openSUSE 13.1-64bit ; Scilab 5.4.1]
>>>>         lebevc at linux-xkf0:~> printf "%0.2f\n" 3.1416
>>>>         bash: printf: 3.1416: invalid number
>>>>         0,00
>>>>         lebevc at linux-xkf0:~> printf "%0.2f\n" 3,1416
>>>>         3,14
>>>>
>>>>         -->x = 0.6231166;
>>>>         -->xstr = msprintf("%0.2f", x)
>>>>            xstr  =
>>>>            0.62
>>>>
>>>>
>>>>         _________________________________________________
>>>>         users mailing list
>>>>         users at lists.scilab.org <mailto:users at lists.scilab.org>
>>>>         http://lists.scilab.org/__mailman/listinfo/users
>>>> <http://lists.scilab.org/mailman/listinfo/users>
>>>>
>>>>
>>>>
>>>>     _________________________________________________
>>>>     users mailing list
>>>>     users at lists.scilab.org <mailto:users at lists.scilab.org>
>>>>     http://lists.scilab.org/__mailman/listinfo/users
>>>>     <http://lists.scilab.org/mailman/listinfo/users>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> users mailing list
>>>> users at lists.scilab.org
>>>> http://lists.scilab.org/mailman/listinfo/users
>>>>
>>>
>>>
>>> _______________________________________________
>>> users mailing list
>>> users at lists.scilab.org
>>> http://lists.scilab.org/mailman/listinfo/users
>>
>>
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users




More information about the users mailing list