Неожиданный результат (NaN) при использовании скобок в вычислениях Javascript

Я пытаюсь сделать очень простой расчет 11.000 + 5.000, ожидая получить 16.000, а затем разделить его на 2, ожидая получить окончательный результат 8.000. Он работал нормально на другом языке (ahk), но я получаю неожиданные результаты, пытаясь использовать его в javascript (не число, 5.5 и 5.50025)

Как мне написать этот расчет, чтобы получить ожидаемый результат 8.000?

var A = "11.000";
var B = "5.000";

//1st try
var resultA = (A + B) / 2;
alert(resultA);


//2nd try
var resultB = parseInt(A + B) / 2;
alert(resultB);

//3nd try
var resultC = parseFloat(A + B) / 2;
alert(resultC);


//expected = 8.000

что означает точка для вас? без шуток.

Nina Scholz 17.03.2019 18:34

десятичный разделитель...

Le____ 17.03.2019 18:37

которого? 1 / 10 === 0.1 ? или тысячи?

Nina Scholz 17.03.2019 18:39

Вы пытаетесь преобразовать 11.0005.000 в int или float — вот почему вы получаете NaN. Делай (parseInt(A)+parseInt(B))/2

eithed 17.03.2019 18:39

Вот совет по отладке: если у вас есть сложное выражение, разбейте его на более мелкие, чтобы вы могли отлаживать каждый шаг. var temp = (A+B); var resultA = temp / 2;

Raymond Chen 17.03.2019 18:42

@NinaScholz эти числа представляют собой результаты вычислений между координатами svg, такими как x400 - x200; я получаю эти значения из изображения SVG.

Le____ 17.03.2019 18:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
99
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Здесь A + B на самом деле выполняет конкатенацию строк, а не простое сложение. вам нужно сначала изменить их на номер

var A = "11.000";
var B = "5.000";


var resultA = ((+A) + (+B)) / 2;
console.info(resultA);

// You can use toFixed if you three decimal digit

console.info(resultA.toFixed(3));

Здесь A и B в формате строки, и как только вы сделаете A + B, результатом будет «11.000» + «5.000» = «11.0005.000» (конкатенация строк). Поэтому, чтобы получить ожидаемый результат, вы должны проанализировать каждое строковое значение на Float/Int, а затем выполнить операцию сложения.

Попробуйте, var resultD = (parseFloat(A) + parseFloat(B)) /2

Просто удалите кавычки, и переменные будут распознаны как числа, а не как строки, поэтому вы получите ожидаемый результат.

var A = 11.000;
var B = 5.000;

//1st try
var resultA = (A + B) / 2;
alert(resultA);


//2nd try
var resultB = parseInt(A + B) / 2;
alert(resultB);

//3nd try
var resultC = parseFloat(A + B) / 2;
alert(resultC);


//expected = 8.000

Другие вопросы по теме