Actionscript 3 Flex Currencyformatter会自动舍入较大的值

Actionscript 3 Flex Currencyformatter会自动舍入较大的值,actionscript-3,flex4,flex3,flex4.6,Actionscript 3,Flex4,Flex3,Flex4.6,我们正在处理价值更高的金额。我们在相应的spark文本输入中显示格式化的量。我们使用简单的mx CurrencyFormatter格式化金额值。我们在16位之前没有任何问题。但在跨越16位之后,数字会自动四舍五入。我们使用的CurrencyFormatter具有以下配置: <mx:CurrencyFormatter id="formateer" thousandsSeparatorTo="," decimalSeparatorTo="."

我们正在处理价值更高的金额。我们在相应的spark文本输入中显示格式化的量。我们使用简单的mx CurrencyFormatter格式化金额值。我们在16位之前没有任何问题。但在跨越16位之后,数字会自动四舍五入。我们使用的CurrencyFormatter具有以下配置:

<mx:CurrencyFormatter id="formateer" thousandsSeparatorTo="," decimalSeparatorTo="."
                              precision="2" currencySymbol="" rounding="none" />
错误输出:

original-->12345678901234567
Number(txtInput.text)-->12345678901234568
formatted-->12,345,678,901,234,568.00 
original-->12345678901234567890
Number(txtInput.text)-->12345678901234567000
formatted-->12,345,678,901,234,567,000.00
最后一位数字7四舍五入为8

错误输出:

original-->12345678901234567
Number(txtInput.text)-->12345678901234568
formatted-->12,345,678,901,234,568.00 
original-->12345678901234567890
Number(txtInput.text)-->12345678901234567000
formatted-->12,345,678,901,234,567,000.00
我已经调试了代码,并且使用了format()方法CurrencyFormatter。实际上,这个问题是由数字转换引起的。我想知道,因为Number.MAX_值是1.79769313486231e+308

我还发现了这个数字的另一个奇怪的行为。我在下面描述

var a:Number = 2.03;
var b:Number = 0.03
var c:Number = a- b;

trace("c --> "+c);
Output : c --> 1.9999999999999998
这种输出仅用于此数字

请向我建议如何解决此问题或建议解决方法

提前谢谢。
Vengatesh s

在使用64位浮点算法的语言中,大数字是一个常见问题(举个例子,Actionscript和Javascript在这方面是相同的)

它与CurrencyFormatter无关,如果您尝试
跟踪(123456789012134566+1)
您将得到123456789012134568。这是因为这个数字有太多的数字填满了64位的存储空间,所以它被四舍五入。我意识到这个解释太简单了,事实上这个论点相当复杂

如果您需要做一些算术运算,那么可以使用一些已经可用的BigInt库(我认为as3crypt有一个)。。。至于格式,我想你得自己动手

编辑:
出于好奇,您可以使用查看您的数字在IEEE754二进制格式中的表示方式

number.MAX_值为1.79769313486231e+308。这代表什么?这是你能得到的最大数字,与此无关。现实情况是,在这个系统中有一些数字(大部分是大数字和小分数)是你无法得到的。在上一个示例中,使用c.toFixed(2)查看预期结果。