[Scilab-users] printf bug?

Stefan Du Rietz sdr at durietz.se
Tue Oct 21 12:12:11 CEST 2014


And the help page of "printf_conversion" states only "decimal point":

"The number of digits to appear after the decimal point for e, E, and 
f conversions"
"If the precision is zero, , no decimal point appears."
"A decimal point appears only if it is followed by a digit."

Consequently, this is a bug. If the behaviour is indeed intended, 
there should be a warning (that you can turn off) if a decimal comma 
is used and some means to force a decimal point!

Stefan

On 2014-10-20 21:04, Stéphane Mottelet wrote:
> In the help page of "string"  it is said that its output depends on
> display parameters which are defined with the format macro, i.e. you
> get the same output
> with
>
> -->string(%pi)
>
> and
>
> -->disp(%pi)
>
> So it is just a feature, not a bug :-D
>
> S.
>
> Le 20/10/2014 19:49, Stefan Du Rietz a écrit :
>> 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
>>>
>>
>>
>> _______________________________________________
>> 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