Найдите напоминание между 2 плавающими числами с помощью fmod () - PullRequest
0 голосов
/ 27 мая 2020

Я пытался проверить, можно ли полностью разделить первое плавающее число на второе плавающее, и получил что-то вроде этого:

$first = 10.20; // or 5.10, 7.14, 9.18
$second = 1.02;

var_dump(fmod($first, $second));

// output is showing
float(1.02)

Но если я попытаюсь разделить эти числа ниже на 1,02 fmod() работает нормально. Я не понимаю, почему fmod() ведет себя так? Любой ответ на этот вопрос поможет мне понять этот факт.

$first = 4.08; // or 2.04, 3.06, 6.12, 8.16
$second = 1.02;

var_dump(fmod($first, $second));

// output is showing
float(0)

1 Ответ

1 голос
/ 27 мая 2020

Это потому, что функция fmod() возвращает только модули с плавающей запятой сделанного деления.

Как и в первом случае, остаток является значением с плавающей запятой, он возвращается функцией.

Но в приведенных ниже примерах, если мы сделаем деления как

$first = 4.08; // or 2.04, 3.06, 6.12, 8.16
$second = 1.02;

, мы получим остаток от целого типа, который равен 0,041616 . Проблема здесь в значениях, отображаемых функцией ограничены только до первого десятичного знака (в данном случае это 0.0). Но если бы нам нужно было найти модули двух чисел как

<?php
$x = 5.7;
$y = 1.3;
$r = fmod($x, $y);
?>

, мы получим значения как float ( 0.5) .

Потому что здесь первое di git после десятичной точки не равно 0.

И, следовательно, в вашем случае функция показывает float(0).

Для получения более подробной информации посетите Нажмите здесь

...