On 2017-04-21 01:51, Bob Sneidar via use-livecode wrote:
Put this into a button:

on mouseUp
   set the numberFormat to "00"
   repeat with i=1 to 10
      put i into myArray [i]
      breakpoint
   end repeat
end mouseUp

At the breakpoint examine the array. There will be a 1 in an element
with the name... ready??? "01"

Okay THAT has GOT to be a bug!!! Why the hell is numberformat
modifying the name of the array element?? I haven't done ANY math on
it. Apparently the engine DOES!

As others have already said, this isn't a bug - just a consequence of
the rules previously mentioned. The engine is doing this:

  repeat with i = strToNum(1) to strToNum(10)
    put i into myArray[numToStr(i)]
  end repeat

So, the value of the key is put into the array as a number but array
keys are always strings, so it is converted to a string before indexing
the array.

I think this is perhaps more evidence that 'numberFormat' should probably be deprecated - or at least marked as 'present for HyperCard compatibility
only and shouldn't be used in new code'.

Indeed, even the latter is somewhat misleading as (due to the IEEE double
internal representation used for numbers in LiveCode), numberFormat does
not and cannot work the same.

(The reason it cannot work the same is that the numberFormat expresses
precision in decimal places, but doubles use binary representation - so
a double can only approximate a decimal number to a certain number of
decimal places, it can't faithfully represent it except for a subset
of values).

My general recommendation is:

  1) Don't use numberFormat in new code.

2) Use format() to format your numbers *when you want to display them*.

  3) Use round() to control the precision of your numbers.

Warmest Regards,

Mark.

--
Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to