为什么奇怪的结果在javascript中添加浮点数?

时间:2017-05-22 16:28:38

标签: javascript floating-point

我有这样的javascript代码:

var strikePrice = parseFloat(this.props.data.strike).toFixed(1);
var commission = parseFloat(this.props.commission / 100).toFixed(2);
var callInMoney = parseFloat(strikePrice + this.state.callPrice + commission).toFixed(2);
var putInMoney = parseFloat(strikePrice - this.state.putPrice - commission).toFixed(2);

console.log("strikePrice: " + strikePrice + " commission: " + commission);
console.log("callprice: " + this.state.callPrice + " putprice: " + this.state.putPrice);
console.log("call: " + callInMoney + " put: " + putInMoney);

输出是这样的:

strikePrice: 34.0 commission: 0.08
callprice: 0 putprice: 0
call: 34.00 put: 33.92

那是错的。这个看涨期权应该是34.08(高出8美分),就像卖出低8美分一样。

为什么结果不正确?

谢谢 马特

2 个答案:

答案 0 :(得分:0)

这个表达式:

strikePrice + this.state.callPrice + commission

评估此值:

"34.000.08"

因为commission是一个字符串值,这是因为[toFixed()][1]接受一个整数并返回一个字符串。

您需要重构代码,以便commission为浮点值,或者在第3行的参数上再次调用parseFloat()

我无法评论为什么putInMoney适合您。对我来说,它给了"NaN"

答案 1 :(得分:0)

toFixed返回一个字符串,所以你实际上正在做一些字符串连接,而不是你期望的算术。

查看刚刚打印出初始添加内容时会发生什么。

var strikePrice = parseFloat('34').toFixed(1);
var commission = parseFloat('0.08').toFixed(2);
console.log(strikePrice + 0 + commission);

相反,您需要先将这些字符串转换为数字。

var strikePrice = parseFloat('34').toFixed(1);
var commission = parseFloat('0.08').toFixed(2);

strikePrice = parseFloat(strikePrice);
commission = parseFloat(commission);

console.log(strikePrice + 0 + commission);