我想在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));
}
}
答案 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事件并在那里进行计算,这将是一个更好的代码。