[Scilab-users] printf bug?

Stefan Du Rietz sdr at durietz.se
Mon Oct 20 19:49:07 CEST 2014


But why the difference between msprintf() and string()?

Stefan

On 2014-10-20 18:19, Stéphane Mottelet wrote:
> 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
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>





More information about the users mailing list