ФорумПрограммированиеJavaScript → А ты знаешь что 0.15 - 0.01 != 0.14 ?

А ты знаешь что 0.15 - 0.01 != 0.14 ?

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 февраля 2011 г. 9:04


    var res=0.15-0.01;
    // res == 0.13999999999999999

    Вопрос: какого х%я? как с этим жить? :D
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 февраля 2011 г. 9:16, спустя 11 минут 34 секунды

    http://us3.php.net/manual/en/language.types.float.php

    в жс та же ситуация
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 февраля 2011 г. 9:24, спустя 8 минут 12 секунд

    в жс та же ситуация

    Javascript

    спасибо КО НРГ!
    Сапожник без сапог
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 22 февраля 2011 г. 9:28, спустя 3 минуты 48 секунд

    так везде, где используются числа с плавающей запятой

    википедия
    Наглядно о числах с плавающей точкой
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 февраля 2011 г. 9:39, спустя 11 минут 37 секунд

    кошмар и что делать? Как отнять 2 числа и получить правильный результат?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 февраля 2011 г. 9:41, спустя 2 минуты 9 секунд

  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 22 февраля 2011 г. 14:04, спустя 4 часа 22 минуты 48 секунд

    var res=0.15-0.01;
    console.log(res.toFixed(2));

    нэ?
    Высокоуровневое абстрактное говно
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 22 февраля 2011 г. 14:28, спустя 23 минуты 24 секунды

    оно-то понятно, но это ж заеб каждый раз так писать
    Спустя 156 сек.
    вот в phpUnit'е assertSame с определенной точностью проверку делает
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 22 февраля 2011 г. 14:30, спустя 2 минуты 40 секунд

    echo 0.15-0.01;

    0.14

    что я неправильно делаю?
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 февраля 2011 г. 23:24, спустя 8 часов 53 минуты 54 секунды

    пока перевожу в целые и с ними работаю, потом назад в флоаты, вроде норм. С toFixed(2) тоже какие-то глюки были, непомню уже.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 февраля 2011 г. 23:26, спустя 1 минуту 56 секунд

    это еще хуня))

    попробуйте сделать

    echo 0xFFFFFFFF; в 32 битной и 64 битной осях - будете удивлены ебана :D
    Сапожник без сапог
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2011 г. 5:00, спустя 5 часов 33 минуты 57 секунд

    echo 0xFFFFFFFF; в 32 битной и 64 битной осях - будете удивлены ебана :D


    а в PHP же вроде без разницы? В смысле, да, на 32-разрядной оси под int в пхп будет отводится 4 байта, но при переполнении оно будет преобразовано в double.

    echo gettype(PHP_INT_MAX) . ', ' . gettype(PHP_INT_MAX + 1); // integer, double


    Это в Си, где всё строго с типами, например, 0xFFFFFFFF было бы равно -1 на 32-разрядах

    В JS вроде вообще все числа с плавающей точкой (или нет?)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2011 г. 22:04, спустя 17 часов 3 минуты 36 секунд

    В JS вроде вообще все числа с плавающей точкой (или нет?)

    скорее всего.

    Это в Си, где всё строго с типами, например, 0xFFFFFFFF было бы равно -1 на 32-разрядах

    удивись, в пхп будет тоже -1 на 32битке, а на 64 битке - большое число :)

    Сапожник без сапог
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2011 г. 5:24, спустя 7 часов 20 минут 8 секунд

    echo 0xFFFFFFFF; // 4294967295
    echo (int) 0xFFFFFFFF; // -1

    проверил, так и есть, но только если явно перевести в integer
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 февраля 2011 г. 6:27, спустя 1 час 3 минуты 14 секунд

    Timur, ты на 32 битной оси проверял? :)

    какой пхп версия? может в 5.3.х поправили, на 5.2 пизда получалась)
    Сапожник без сапог

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