Хорошо, я не кодер, у меня нет школы об этом, но ... Я не могу понять, почему эта маленькая операция возвращает значение NaN!Javascript возвращает значение 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 вар, и если я хочу использовать другой капитал, сценарий использовать 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 как текст, а не как цифры.
Любая идея?
Возможно, вам придется использовать 'parseInt' или' parseFloat' –
. Стоит сделать шаг назад и подумать о том, как вы обрабатываете значения валюты и теряете точность из-за конверсий с плавающей запятой (особенно если вы используете 'Math.floor() ', как вы здесь. См. [обсуждение здесь] (http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript) для получения дополнительной информации Кроме того, в целом также стоит обрабатывать валютные значения в 'cents' (или независимо от минимально возможного значения валюты) или в качестве строк, чтобы обойти большинство проблем с базовой точностью. – Andrew
Возможный дубликат [Javascript - NaN] (http: // stackoverflow.com/questions/25747520/javascript-nan) – rockerest