ФорумПрограммирование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, 2:04 п.п., спустя 4 часа 22 минуты 48 секунд

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

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

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

    Spritz Фев. 22, 2011, 2:28 п.п., спустя 23 минуты 24 секунды

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

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

    Spritz Фев. 22, 2011, 2:30 п.п., спустя 2 минуты 40 секунд

    echo 0.15-0.01;

    0.14

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

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

    Spritz Фев. 22, 2011, 11:24 п.п., спустя 8 часов 53 минуты 54 секунды

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

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

    Spritz Фев. 22, 2011, 11:26 п.п., спустя 1 минуту 56 секунд

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

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

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

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

    Spritz Фев. 23, 2011, 5 д.п., спустя 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, 10: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 пизда получалась)
    Сапожник без сапог

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