php sqrt функция, которая возвращает целое число? - PullRequest
0 голосов
/ 02 марта 2011

Я создаю простую PHP-программу, которая выполняет действие, если (и только если) три случайных числа вычисляются в целое число.Все случайные числа - это целые числа, созданные с помощью функции rand ().Не вдаваясь в конкретные детали вычисления, важно (с точки зрения моей проблемы), что оно включает получение квадратного корня.Не будучи очень опытным программистом PHP, единственная функция квадратного корня, которую я знаю, это sqrt ().Проблема в том, что sqrt () возвращает число с плавающей запятой, даже если входные данные являются целыми числами, а выходные данные являются точными.Я кратко подумал о преобразовании вывода в целое число (используя что-то вроде intval (), но это не сработает, потому что это преобразует все выходные данные в целые числа, делая тест бесполезным! Любые идеи о том, как это сделатьэто? Спасибо,

Ответы [ 5 ]

4 голосов
/ 02 марта 2011

Если вы просто хотите определить, является ли это идеальный квадрат, просто определите, является ли

intval(result) * intval(result) == originalValue

Я не знаю версию этих функций php, но, возможно, вы знаете?:)

3 голосов
/ 02 марта 2011

Это распространенная проблема при работе с плавающей запятой.Просто убедитесь, что число с плавающей точкой очень близко к целому числу;обычно это делается путем проверки того, что дробная часть очень мала:

if (abs(round(f)-f))<delta)
  # do stuff

Здесь delta - это небольшая константа, например 0,0001.Насколько оно должно быть маленьким, зависит от того, насколько близко вы ожидаете, что ваш результат будет целым числом.Это будет зависеть от ваших расчетов.

0 голосов
/ 31 июля 2016

Это знание из программирования на другом языке, но пытались ли вы умножить выражение на 1. Например, если вам нужно получить целое число, например,

a = 3.45 * 8;

, сделайте это

a = 3.45 * 8 * 1;
0 голосов
/ 31 июля 2016

$result % 1e9 вернет целочисленную часть $ result (для негативов он найдет верхнюю часть результата).Но это взлом, поэтому вы можете использовать его только для удовольствия.

https://repl.it/Chqm/1

0 голосов
/ 02 марта 2011

Что-то вроде if($result % 1.0 == 0) может работать, но у меня нет возможности проверить это прямо сейчас.

...