Javascript在数学运算后返回一个NaN值

Javascript return a NaN value after a math operation

本文关键字:一个 NaN 返回 运算 Javascript      更新时间:2023-12-02

好吧,我不是程序员,我对此没有任何了解,但。。。我不明白为什么这个小运算会返回一个NaN值!

我在的开头有这个var

// 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

为什么数学会返回这个奇怪的数字?就像两个数字的串联?脚本似乎像文本一样使用var,而不是像数字一样使用var。

有什么想法吗?

使用toFixed() 生成字符串

var Capital = (engine.getBalance() / 100).toFixed(2);

后来用作数字,但它是一个字符串。

 Capital += LastProfit;

解决方案:如果需要固定,则使用parseFloat()再次生成数字。

让我们举一个例子:

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。