2

我在 AS3 中使用 NumberFormatter 时遇到了这种奇怪的行为。

重要的是要了解我需要使用NumberBaseRoundType.UP,因为我需要NumberBaseRoundType.DOWN在申请信用时使用。

考虑到值为 2 的舍入精度,我猜 NumberFormatter 不应该改变我的数字。在下面的示例中,2.43 格式化后变为 2.44..!

所以这Math.pow(...)不是我正在寻找的解决方案 PLUS,我很想了解这是什么以及为什么会发生这种情况。谢谢!

var roundUp:NumberFormatter = new NumberFormatter();
roundUp.rounding = NumberBaseRoundType.UP;
roundUp.precision = 2;

trace(roundUp.format(2.41)); // Output : 2.41
trace(roundUp.format(2.42)); // Output : 2.42
trace(roundUp.format(2.43)); // Output : 2.44 <-- ???
trace(roundUp.format(2.44)); // Output : 2.44
trace(roundUp.format(2.45)); // Output : 2.46 <-- ???
trace(roundUp.format(2.46)); // Output : 2.46
4

1 回答 1

0

这不是一个完整的答案。但是要从您使用的 NumberFormatter 类开始(它来自什么包)。有些源是可用的,有些包含在播放器本身中并且不可访问,但是在查看 4.6 框架中 Spark 中包含的 on 时,它包含了这个类级别的注释,它提供了一些见解:

/**
 *  The NumberFormatter class provides locale-sensitive formatting
 *  and parsing of numeric values. It can format <code>int</code>,
 *  <code>uint</code>, and <code>Number</code> objects.
 *
 *  <p>This class is a wrapper class around the 
 *  flash.globalization.NumberFormatter class. 
 *  Therefore, the locale-specific formatting
 *  is provided by the flash.globalization.NumberFormatter.
 *  However, this NumberFormatter class can be used in MXML declarations,
 *  uses the locale style for the requested Locale ID name, and has
 *  methods and properties that are bindable.  
 *  </p>
 *
 *  <p>The flash.globalization.NumberFormatter class use the
 *  underlying operating system for the formatting functionality and
 *  to supply the locale-specific data. On some operating systems, the
 *  flash.globalization classes are unsupported, on these systems this wrapper
 *  class provides fallback functionality.</p>
 *
 *  @mxml <p>The <code>&lt;s:NumberFormatter&gt;</code> tag inherits all of the tag 
 *  attributes of its superclass and adds the following tag attributes:</p>
 *
 *  <pre>
 *  &lt;s:NumberFormatter 
 *    <strong>Properties</strong>
 *    negativeNumberFormat="<i>locale and OS dependent</i>"
 *  /&gt;
 *  </pre>
 *
 *  @includeExample examples/NumberFormatterExample1.mxml
 *  @includeExample examples/NumberFormatterExample2.mxml
 *
 *  @see flash.globalization.NumberFormatter
 * 
 *  @langversion 3.0
 *  @playerversion Flash 10.1
 *  @playerversion AIR 2.5
 *  @productversion Flex 4.5
 */

最终,尽管它声明播放器以某种方式使用底层操作系统来实现格式化。这当然是一个奇怪的问题,但如果以前从未发现过并且没有发布解释或至少是错误报告,如果它实际上是 Flash 播放器中的问题,我会感到惊讶。有关您的 SDK 版本和播放器版本的更多详细信息可能会有所帮助,您是否尝试过摆弄其中任何一个结果是否有任何变化?

另外,根据您要实现的目标,您可以通过编写自己的类来处理此案例的格式化来解决此问题,如果这只是您需要处理的一种情况,如果它更像是一个系统广泛使用的东西,需要 NumberFormatter 类的更多功能,我可以理解想要解决根本问题。

于 2012-05-24T20:39:20.927 回答