【问题标题】:Number Formatter: 00 not 0数字格式化程序:00 不是 0
【发布时间】:2011-01-10 21:23:51
【问题描述】:

我想格式化一个数字以显示 00 而不是 0,以及 01, 02...10, 11,

【问题讨论】:

    标签: apache-flex actionscript-3 formatting mxml number-formatting


    【解决方案1】:
    function formatNumber(number) : String {
      if (number > 10)
        return number;
      else
        return '0' + number;
    }
    

    【讨论】:

    • 这个函数没有返回类型。 :)
    【解决方案2】:

    也许这是我的假设,但您是否试图在某种时间显示中表示秒或分钟?使用 Flex 的一种方法是使用 Date 对象和 DateFormatter。这样你就可以提供格式字符串来输出你想要的时间。

    var seconds:int = 4;
    
    var date:Date = new Date();
    date.seconds = seconds;
    
    var formatter:DateFormatter = new DateFormatter();
    formatter.formatString = "SS";
    
    trace(formatter.format(date));
    

    【讨论】:

      【解决方案3】:

      您不能将数字格式化为具有前导 0 填充。但是由于您需要此功能来格式化 NumericStepper 组件中的数字显示,因此您可以在每次值更改时简单地格式化输出 textField 中的文本。

      我为你写了一个小例子。创建一个新的 AS3 FLA,将 NumericStepper 添加到阶段,将其实例名称设置为“stepper”。然后将 Main.as 设置为主类。

      Main.as:

      package  {
          import fl.controls.NumericStepper;
          import flash.text.TextField;
          import flash.events.Event;
          import flash.display.MovieClip;
      
          public class Main extends MovieClip{
      
              public var stepper:NumericStepper;
      
              public function onStepperChange (ev:Event) : void {
                  updateStepper();
              }
      
              private function updateStepper() : void {
                  var num:String = stepper.value > 10 ? "" + stepper.value : "0" + stepper.value;
                  stepper.textField.text = num;
              }
      
              public function Main() {
                  updateStepper();
                  stepper.addEventListener (Event.CHANGE, onStepperChange);
              }
      
          }
      
      }
      

      【讨论】:

      • 但那是一个字符串不是数字,这将被添加到 NumericStepper 组件的值中
      • 我们不知道 - 你应该提到你需要这个组件...我已经改变了我的答案来解决你的问题。
      【解决方案4】:

      如果使用 spark.components,则 NumericStepper 具有 valueFormatFunction 属性。 如果您使用的是 fl.controls,那么我认为上面在 NumericStepper 上使用 Event.CHANGE 的解决方案是最好的。

      这就是我在使用 spark.components.NumericStepper 时的做法

      var num_fld:NumericStepper = new NumericStepper();
      num_fld.valueFormatFunction = numericFieldFormat;
      
      
      private function numericFieldFormat(num:Number) : String {
          return((num < 10) ? '0' + String(num) : String(num));
      }
      

      【讨论】:

        【解决方案5】:

        如果您在 Flex 3 中,则无法直接访问 inputField,但您可以使用 mx_internal 轻松解决

        <mx:NumericStepper id="stpprHours" minimum="1" maximum="24" stepSize="1" creationComplete="formatStepper(stpprHours)" change="stpprHours_changeHandler(event)" value="1"/>
        
        <mx:NumericStepper id="stpprMinutes" minimum="0" maximum="59" stepSize="1" creationComplete="formatStepper(stpprMinutes)" change="stpprMinutes_changeHandler(event)" value="0"/>
        

        <mx:Script>
         <CDATA[[
                protected function stpprHour_changeHandler(event:NumericStepperEvent):void {
                    formatStepper(stpprHours);              
                }
        
                protected function stpprMinutes_changeHandler(event:NumericStepperEvent):void {
                    formatStepper(stpprMinute);                             
                }
        
                protected function formatStepper(stepper : NumericStepper) : void {
                    if(stepper.value<10) stepper.mx_internal::inputField.text = "0" + stepper.value;
        
            }
         ]]>
        </mx:Script>
        

        【讨论】:

          猜你喜欢
          • 2013-07-02
          • 1970-01-01
          • 1970-01-01
          • 2020-11-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-07
          • 2012-08-08
          • 1970-01-01
          相关资源
          最近更新 更多