Ошибка простого вычитания в Javascript

Я был шокирован, увидев такую ​​основную ошибку вычитания в JS, я уверен, что большинство из вас здесь испытали бы эту проблему, пожалуйста, помогите мне с работой здесь, Все, что я делаю, это вычесть число из 100, которое дает неожиданные результаты, пример указан ниже

100 - 99.1
// returns 0.9000000000000057

Я делаю что-то неправильно здесь?: S Я смущен

Ответы

Ответ 1

Значения с плавающей точкой никогда не точны, как вы ожидаете. Вы можете использовать объект Number, чтобы преобразовать его, чтобы ответить, как вам нужно.

Number(100).toFixed(2) - Number(99.1).toFixed(2)

Ответ 2

Вы работаете с числами с плавающей запятой, а не целыми числами. Ожидается.

Причина в том, что вы не можете точно представлять числа, такие как 0,1 и 0,3 в двоичном формате. Точно так же, как вы не можете представлять 1/3 начисления в десятичной форме.

Ответ 3

В JavaScript все числовые типы - это объекты Number, которые представлены как числа с плавающей запятой с двойной точностью.

В другой заметке вы можете получить строковое представление этих чисел в определенной десятичной точке с помощью метода Number toFixed, который принимает число, обозначающее, сколько десятичных точек вы хотели бы, чтобы возвращаемая строка представляла на основе приемник.

Пример:

var five = 5.00001;
console.log(five.toFixed(1)); //5.0

Ответ 5

Сначала не позволяйте себе присваивать значение float переменной, а затем делать это с прямым выражением переменной. вот пример:

**var c = 80.35-20.35;
alert(c.toFixed(2));**

это назначит 60,00, но другой способ решить это вернет 59.99999999.

Ответ 6

Это не идеальный ответ, но он работает.

function format_float_bug(num)
{
   return parseFloat( num.toFixed(15) ); 
} 

вы можете использовать следующее:

format_float_bug(4990 % 10);

потому что ниже числа (49.89999999999999857891452848) первые 15 знаков после запятой, как 9999999