hixon 发表于 2022-11-22 10:10:28

为什么toFixed()方法报错了?

本帖最后由 hixon 于 2022-11-22 10:20 编辑

在我们的日常开发工作中,可能经常会使用到 toFixed()方法来保留浮点数的小数位数,但是需要注意的是Number.toFixed()方法返回的值类型为string(字符串)

如 var a = 3.1415926; 我们要保留两位小数并显示到标签上,那么我们可以这样来写代码:var a = 3.1415926;
ui.main.label.text = a.toFixed(2);
下面我们举例说明一下 toFixed()方法报错,如下图的界面,第一次点击“确定”按钮的时候,没有报错,但是第二次点击的时候,就报下面的错了:
ui.main.textButton_enter.onRelease = function() {
    var temp_new;
    var temp_old;
    var temp;
    temp_new = parseFloat(ui.main.singleLineInput_Temp.text);
    temp_old = parseFloat(ui.main.label_tempperature.text);
    temp = temp_new - temp_old + Temp_Value; // Temp_Value为全局变量,初始值为 0
    Temp_Value = temp.toFixed(1);
    ui.main.label.text = Temp_Value;
};


我们来打印日志定位一下问题
ui.main.textButton_enter.onRelease = function() {
    var temp_new;
    var temp_old;
    var temp;
    temp_new = parseFloat(ui.main.singleLineInput_Temp.text);
    temp_old = parseFloat(ui.main.label_tempperature.text);
    temp = temp_new - temp_old + Temp_Value; // Temp_Value为全局变量,初始值为 0
    util.console.log('typeof Temp_Value: ' + typeof Temp_Value); // 打印Temp_Value的类型
    util.console.log('typeof temp: ' + typeof temp); // 打印temp的类型
    Temp_Value = temp.toFixed(1);
    ui.main.label.text = Temp_Value;
};


通过上面的打印日志,我们了解到第一次点击“确定”按钮后,Temp_Value变成了string类型了,因为 Temp_Value = temp.toFixed(1); 然后第二次点击“确定”按钮时,temp的值也变成string了,因为 temp = temp_new - temp_old + Temp_Value;
所以再次调用 temp.toFixed(1)的时候就会报错了。


我们可以这样来解决,只需要修改一下第7行代码,通过parseFloat()方法将 Temp_Value转换为浮点值再进行加法计算,得到的 temp值也是浮点值,不再是字符串类型了。
temp = temp_new - temp_old + parseFloat(Temp_Value); // Temp_Value为全局变量,初始值为 0



页: [1]
查看完整版本: 为什么toFixed()方法报错了?