За последние 24 часа нас посетил 20651 программист и 1699 роботов. Сейчас ищут 1583 программиста ...

С математикой у меня плохо

Тема в разделе "JavaScript и AJAX", создана пользователем rewuxiin, 29 авг 2018.

  1. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    Вот что у меня выдал js, когда я не понял, какого хрена неверно происходит калькуляция отнимания процентов при скидке в 100%.

    Код (Javascript):
    1. var result = 220;
    2. var percent = 100;
    3. result = result - ((result / 100) * percent);
    210 - ((210 / 100) * 100)
    0

    220 - ((220 / 100) * 100)
    -2.842170943040401e-14

    230 - ((230 / 100) * 100)
    2.842170943040401e-14

    240 - ((240 / 100) * 100)
    0


    какого, спрашивается, органа?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это считай что ноль :D
    очень маленькое число
    это просто у тебя числа с плавающей запятой, они всегда нечеткие, поэтому получается чуток неточно.
     
    rewuxiin нравится это.
  3. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    бляха, сейчас начинаю вспоминать, вроде видел это на learn.javascript.ru
    проще, в общем, проверку сделать - если 100 - результат 0
     
  4. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    И проверку деления на ноль :)
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Округляй
     
    rewuxiin нравится это.
  6. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Код (Javascript):
    1. var d = document,
    2.     result = parseFloat(200),
    3.     percent = parseFloat(100);
    4.  
    5. result = result - ( ( result / 100 ) * percent );
    6.  
    7.  
    8. d.write( result.toFixed(2) );
    а так?
     
    rewuxiin нравится это.
  7. Taktreba

    Taktreba Активный пользователь

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    var a = 0.2
    var b = 0.1
    var c = a + b
    c == 0.3 - false
    замечательный js
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это так работает в принципе оно под капотом
    просто js не стал добавлять своё округление