好吧,我不是一个程序员,我没有关于它的学校但是......我无法弄清楚为什么这个小操作会返回一个NaN值!
我在开头就是这个变种
// Varialbes for simulation purpose
var Simulation = false;
var FakeCapital = 0;
var PercentOfTotal = 100;
// Variables
var Capital = (engine.getBalance() / 100).toFixed(2);
var UsableBalance = Math.floor(PercentOfTotal / 100 * Capital);
var StartingBalance = UsableBalance;
if (FakeCapital > 0 && Simulation) {
Capital = FakeCapital;
UsableBalance = Math.floor(PercentOfTotal / 100 * Capital);
StartingBalance = UsableBalance;
}
所以如果我激活similation var并且我想使用另一个资本,脚本会使用fakecapital来测试我的脚本。
这里一切正常,但我认为这里存在问题,特别是UsableBalance = Math.floor(PercentOfTotal / 100 * Capital);
因为脚本运行时: 如果我不使用模拟,一切顺利 如果我使用模拟和假资本,一切顺利
但是,如果我使用模拟并且我想使用真实资本,那么UsableBalance var很奇怪,不是立即,而是在脚本运行时!我试着更好地解释
让我们假设我使用模拟阶段并且我想使用真实资本
你的平衡是:87.26位。 我将使用:87位用于此会话,作为您的请求。
这里一切都好,但这段代码:
if (TemporaryLoss <= 0) {
Capital += LastProfit;
UsableBalance = Math.floor((PercentOfTotal / 100) * Capital);
TemporaryLoss = 0;
}
返回:
TemporaryLoss: 0
Capital: 87.26
LastProfit: 1.0299999999999998
PercentOfTotal: 100
Capital: 87.261.0299999999999998
为什么数学会返回这个奇怪的数字?喜欢2个数字的串联?似乎脚本使用var像文本而不是数字。
任何想法?
答案 0 :(得分:3)
您使用toFixed()
var Capital = (engine.getBalance() / 100).toFixed(2);
以后用作数字,但它是一个字符串。
Capital += LastProfit;
解决方案:如果需要修复,请使用parseFloat()
再次输入数字。
答案 1 :(得分:0)
让我们举一个例子:
var x = 1;
var y = '1';
var z = x + (y*10)
变量y的数据类型被隐式强制转换为当前操作的数字,以评估z的值。
因此,对于z,y被视为一个数字,因为(y*10)
导致了隐式强制,但并没有将y本身改为数字
在你的情况下,
var Capital =(engine.getBalance()/ 100).toFixed(2);
导致Capital成为一个字符串。 因此,对Capital的任何进一步添加操作都会导致连接 如前所述,您必须显式转换为int或float。