On May 19, 2006, at 1:04 PM, Peter T. Evensen wrote:

put 10.27 into tNumber
put the trunc of tNumber into tInteger
put tNumber - tInteger into tDecimal
put 100 * tDecimal into tNew Decimal
put the trunc of tNewDecimal

and I get 26 instead of 27.

Am I doing something wrong?  Is this a bug?

This is not a bug.

The result of arithmetic is stored internally as a floating point number with a binary point.

tDecimal is really this (about):

0.26999999999999957367435854393988847732543945312...

Before tNumber can be have the trunc applied, it must be converted to the same form. The decimal numeral you entered cannot be represented exactly. Here is a close approximation:

10.26999999999999957367435854393988847732543945312...

Some operations such as =, fudge a little to accommodate this. Apparently trunc does not.

Though this is not a bug, it is a surprise for many, and I believe a shortcoming of Revolution. However, others might feel that the increased execution time of (say) decimal point arithmetic is not worth it.

Is there another way to isolate the decimal portion?

If you just want to create a numeral with 2 digits to the right, then set the numberFormat to "#.00". If you actually want the round of the two digits, use round() instead of trunc(). If you want those two digits you can pick off the last two characters after formatting.

Dar Scott

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

Reply via email to