Math.max没有返回任何一个被比较的数字

时间:2014-09-17 18:42:54

标签: javascript math

下面是我正在尝试在我的jQuery应用程序中使用的简单Math.max语句,以及被调用的方法。

    guaranteedEoy: function() {
        return this.fixedAllocation() * (1 + (this.attributes.fixedRate / 100)) * Math.pow(1, 6);
    },

    contractVal: function (value) {
        value = parseFloat(value).toFixed(2);
        console.log(value);
        console.log(this.guaranteedEoy());
        console.log(parseFloat(this.guaranteedEoy()) + parseFloat(value));
        console.log(this.attributes.purchasePayment * Math.pow(1.01, 7));
        console.log(Math.max((this.attributes.purchasePayment * Math.pow(1.01, 7)), (this.guaranteedEoy() + value)));
        console.log('   ');
        return Math.max((this.attributes.purchasePayment * Math.pow(1.01, 7)), (this.guaranteedEoy() + value));
    },

我将console.log语句放在那里,因为从Math.max函数返回的数字比它应该比较的数字指数大得多。为了说明这里的控制台读数的屏幕打印:

enter image description here

此处简化每个控制台读数的值对应

Value: 64000.00
this.guaranteedEoy(): 37008
this.guaranteedEoy() + value: 101008
this.attributes.purchasePayment * Math.pow(1.01, 7): 107213.53521070098
Math.max((this.attributes.purchasePayment * Math.pow(1.01, 7)), (this.guaranteedEoy() + value)): 370086400

基本上Math.max语句读取

Math.max(107213.53521070098, 101008)

但由于某种原因,它返回的值为370086400

2 个答案:

答案 0 :(得分:3)

370086400是所提及的值3700864000的串联。

应该是:

console.log(Math.max((this.attributes.purchasePayment * Math.pow(1.01, 7)),
        (parseFloat(this.guaranteedEoy()) + parseFloat(value))));

再次使用parseFloat以避免字符串连接(发生)。

修改:看起来value是字符串(由于.toFixed()),而this.guaranteedEoy()返回Number。因此,仅parseFloat的{​​{1}}就足够了。

答案 1 :(得分:1)

toFixed返回一个字符串,因此this.guaranteedEoy() + value执行字符串连接。如果您只想将值四舍五入到小数点后两位,请参阅Round to at most 2 decimal places (only if necessary)