On Thu, Jun 28, 2001 at 02:57:48PM +0100, Iain McNaughton wrote:
I was using WinHugs as a calculator. From the main command prompt in WinHugs, I typed the following:
102.0*201.0 + 103.0*202.0 + 102.0*201.0 +102.0*202.0 + 102.5*200.5
I then hit 'return', and was presented with the answer:
102965.0
Indeed, you get that answer if you type 102965.25, which is somewhat confusing. Hugs is converting this to a string with sprintf %g, which yields "102965". It can't print that out because it looks like an Int, so it appends ".0". This only happens if there are 6 digits before the decimal point. (It also does changes 4e+5 to 4.0e+5, but that can't go wrong like this.) All this is in floatToString in machdep.c. A hack-around is to change the line if (buffer1[i]!='.') { to if (buffer1[i]=='\0') { sprintf(buffer1,"%.1f",fl); i = j = 0; } else if (buffer1[i]!='.') {