我有这样的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美分一样。
为什么结果不正确?
谢谢 马特
答案 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);