2015-03-11 6 views
0

Я использую imagefilledrectangle() в моем проекте. 2, 3, 4 и 5 параметры принимают координаты точки. Описание функции указывает, что тип должен быть integer. Моя проблема заключается в том, что я вычисляю их во время выполнения и гарантируя, что они целые числа оказываются трудными.Использование чисел с плавающей запятой в imagefilledrectangle()

Мой вопрос:

Каковы последствия использования «действительных чисел» вместо целых чисел? Например:

imagefilledrectangle($img, 1.2, 3.4, 4.5, 7.8, $color) 

Ref: http://php.net/manual/en/function.imagefilledrectangle.php

+0

Вы имеете дело с пикселями. нет поплавков, поэтому вы могли бы случайным образом рисовать прямоугольники, сдвинутые на 1px вверх, в зависимости от того, как PHP решает округлить ваши значения float. Я предполагаю, что он просто усекает вниз, поэтому '(1.1, 2.9)' будет обрабатываться так же, как '(1, 2)', но в какой-то день он мог бы решить по-другому и стать '(1, 3)' , –

+0

Спасибо за информацию @MarcB. Вы знаете, как я могу узнать, как PHP выполняет округление? Мне было бы интересно знать – henrywright

+1

, функция [docs] функции (http://php.net/imagefilledrightangle) явно говорит, что args позиции - это ints. поэтому вы будете связаны с результатами преобразования php core float-> int. так что теперь ваши поплавки просто усекаются вниз: 'echo (int) 1.9' дает вам' 1'. возможно, в php 7.0 или что-то вместо этого он будет заменен на 'round (1.9)', давая вам '2'. –

ответ

1

Как написано, ваши поплавки будут получать integerized усечения, в соответствии с правилами преобразования float-> Int РНР. Таким образом, вызов функции будет эффективно

imagefilledrectangle($img, 1, 3, 4, 7, $color) 

благодаря функции explicitly defining аргументы позиции, как быть int.

например.

echo (int)7.8; // outputs '7' 
echo (int)1.2; // outputs '1'