0

Давно уже сталкивался с такой проблемой, интересна природа этих аномалий, и как их решать, когда требуются подобные вычисления, например:

let a = 0.9;
let b = 0.3 * 3; // должно быть тоже 0.9
let result = a - b; // 0.9 - 0.9 = 0
console.log(result); // результат = 1.1102230246251565e-16

Ну а если же вместо 0.9 и 0.3 подставить целые числа, то результат предсказуем. Интересно почему это не фиксят, и как с этим бороться...

  • " должно быть тоже 0.9" --- неа.... там 0.8999999999999999 – Алексей Шиманский Jun 13 '21 at 07:55
  • Это не баг а спецификация. https://www.w3schools.com/js/js_numbers.asp – Aziz Umarov Jun 13 '21 at 07:58
  • А где больше единицы? Это 1е-16 – Aziz Umarov Jun 13 '21 at 08:00
  • @insolor на самом деле не совсем дубликат. Потому что в дубликате написано сравнивать с дельтой....но как сравнить в текущем случае result с дельтой? Если в процессе вычисления неизвестно где этот баг всплывёт. + неплохо было бы расписать реальные возможные варианты "борьбы" кроме дельты – Алексей Шиманский Jun 13 '21 at 08:01
  • Не больше единицы, а 0.0000000000000001110223024.... – Leonid Jun 13 '21 at 08:02
  • @CoderYooda "откуда взялось значение больше1" --- на самом дела значение не больше 1. там экспонента. т.е. 1e-16 = 0.00000000ещёСколько-тоНулей001 (написано 1 в степени минус 16) – Алексей Шиманский Jun 13 '21 at 08:03
  • Да нет, всё банально. Пишу интернет магазины, и после расчета скидок у товаров часто встречается такая фигня. приходится округлять и уделять этому больше внимания. – CoderYooda Jun 13 '21 at 08:19
  • Вот и округляйте до копейки, или даже одной тысячной копейки совершенно спокойно и никогда не встретитесь с таким явлением. – Leonid Jun 13 '21 at 08:27

0 Answers0