@miklfirm

PHP: Почему остаток от деление на единицу меньше (к int приведено)?

$a = 7300;
$b = 0.45;
echo ((int)($a*$b)) % 1000;
Выводит 284, вместо 285.
Помогите понять ошибку.

Код не дословный, но близкий
-------------------------------------------
UP: (int)($a*$b) выводит 3284, хотя должно быть 3285.
  • Вопрос задан
  • 118 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
Вот тут 3285 получается. :)

Вы сравниваете в одной среде? Разные языки/библиотеки/операционки/процессоры могут считать по разному, потому что при вычислениях с плавающей точкой компьютер может посчитать или быстро или точно (и то не всегда). На практике, большинство систем идут на компромиссы.

Примеры: https://0.30000000000000004.com/
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
почему так
кратко - https://www.php.net/manual/en/language.types.float.php
подробно - https://ru.wikipedia.org/wiki/Число_с_плавающей_запятой

правильное решение
https://www.php.net/manual/en/book.bc.php
https://www.php.net/manual/en/book.gmp.php

просто решение которое даёт 285
<?php
$a = 7300;
$b = 0.45;
var_dump(
    round($a*$b) % 1000
);
//int(285)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы