在Adobe Flash中获取NaN(非数字)

时间:2015-10-02 10:17:44

标签: actionscript-3 flash

我想在Flash中使用AS制作一个小气体计算器,但即使在文本字段内输入任何内容之前,我在文本字段中也会收到错误“NaN”。问题出在哪里?提前谢谢了。这是我的动作代码:

km_txt.restrict = ".0-9";
liter_txt.restrict = ".0-9";
priceliter_txt.restrict = ".0-9";
stage.addEventListener(Event.ENTER_FRAME,  calculate);

        function  calculate(param1:Event)
        {
            if (liter_txt.text != "" && km_txt.text != "")
            {
                usage_txt.text = String(100 * Number(liter_txt.text) / Number(km_txt.text));
            }

            if (liter_txt.text != "" && km_txt.text != "" && priceliter_txt.text != "")
            {
                cost_txt.text = String(Number(liter_txt.text) / Number(km_txt.text) * Number(priceliter_txt.text));
            }

            if (liter_txt.text != "" && priceliter_txt.text != "")
            {
                total_txt.text = String(Number(liter_txt.text) * Number(priceliter_txt.text));
            }

        }

2 个答案:

答案 0 :(得分:2)

您正在从TextField对象中向Number转换几次,但那时的那些不包含任何内容,因此强制转换为NaN:

String(100 * Number(liter_txt.text) / Number(km_txt.text));

现在尝试添加/乘/分数和NaN一起仍然解析为NaN。

您需要先检查值,如果获得NaN,则可能设置为0,存储变量以简化操作:

var value:Number = Number(liter_txt.text);
if(isNaN(value))
{
    //this is not a number so substitute with 0?
    value = 0;
}

答案 1 :(得分:0)

确保输入TextField的初始文本值,因为您正在检查“”的值。在块的顶部,写;

km_txt.text = "";
liter_txt.text = "";
priceliter_txt.text = "";

如果您在TextFields上收听TextEvent.TEXT_INPUT事件并在那里进行计算,这将是一个更好的代码。