Bram Moolenaar wrote:
>> g and G omit superfluos zeroes, as well as the decimal point:
>> 
>>   double n = 12;
>>   printf("%g\n", n);   // prints 12
>>   printf("%#g\n", n);  // prints 12.0000
> 
> Vim is already using %g.  For me the results are different.

In Vim, the code in vim_snprintf() (in message.c) replaces 'g' with 'f' for a 
small
value like 12, so Vim does not give the result quoted above. However, "standard"
printf should do what I said (see [1]).

I am one of those who are inclined to NOT complicate the Vim source by 
attending to
details of handling floating point, so I would live with the current situation.
However, it did occur to me that you might contemplate whether a config build 
option
could specify if the native snprintf() should be used. Then if someone wants
"standard" printf, they could build Vim so vim_snprintf() calls the version 
supplied
by their library.

Or, the code in vim_snprintf() could be made a little more complex by NOT 
replacing
'g' with 'f'. I'll have a go at that if you like (needs a little care to be 
sure we
won't overflow the tmp buffer).

[1] I have confirmed my claim quoted above on two current systems: Windows + 
Linux.
There are also lots of references that confirm this (including a BSD manual). In
http://en.wikipedia.org/wiki/Printf the description for g,G says:

"Print a double in either normal or exponential notation, whichever is more
appropriate for its magnitude. 'g' uses lower-case letters, 'G' uses upper-case
letters. This type differs slightly from fixed-point notation in that 
insignificant
zeroes to the right of the decimal point are not included. Also, the decimal 
point
is not included on whole numbers."

John


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui