Javascript在数学运算后返回NaN值

时间:2016-04-03 07:38:25

标签: javascript nan var

好吧,我不是一个程序员,我没有关于它的学校但是......我无法弄清楚为什么这个小操作会返回一个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像文本而不是数字。

任何想法?

2 个答案:

答案 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。