PHP, предотвратить удаление ведущих нулей - PullRequest
3 голосов
/ 01 февраля 2010

У меня есть массив чисел от 5 до 6,4, но числа относятся к футам и дюймам, и я использую их для расчета.

Когда я использую 5.10, он удаляет ноль, и у меня такой же вывод, как если бы он был 5.1.

Есть ли в любом случае, чтобы PHP не удалял 0. Я предполагаю, что он выполняет своего рода приведение по умолчанию.

Заранее спасибо

Ответы [ 7 ]

9 голосов
/ 01 февраля 2010

Если вы имеете в виду «5 футов и 10 дюймов», вы не можете представить это целым числом (или с плавающей запятой) - как видите, вы столкнетесь с серьезными проблемами таким образом.

Компьютер делает именно то, что вы просили от него (не обязательно то, что вы хотели). Например. Google сообщает мне, что 5,8 фута == 69,6 дюймов, что чуть больше 5 футов 8 дюймов (== 68 дюймов). Однако (float) 5.10 === (float) 5.1 === (float) 5.100000 (пять плюс одна десятая).

Для американской измерительной системы вам понадобится нечто более сложное, чем int - поскольку футы и дюймы не могут быть чисто преобразованы друг в друга в десятичном формате (IIRC, 1 фут = 12 дюймов, следовательно, 5 футов 1 дюйм = 5,083 ноги, плюс ошибка округления).

Проверьте, например, Zend_Measure ; это коллекция классов PHP, которая позволяет вам работать с различными стандартами измерения, я думаю, что есть поддержка и для американской / имперской системы.

РЕДАКТИРОВАТЬ: если все остальное не удается, вы можете преобразовать оба числа в дюймы - например, 5'10 "== (5 * 12) + 10 == 70 дюймов, что является хорошим целым числом, с которым вы можете работать.

5 голосов
/ 01 февраля 2010

При использовании недесятичных единиц, таких как футы, дюймы или время, мне нравится использовать наименьшую интересующую меня единицу измерения (секунды или дюймы) для внутреннего отслеживания значений, а затем для вывода выводить их в футах и ​​дюймах. Я думаю, вам будет проще, чем пытаться адаптировать десятичные числа для этой цели.

3 голосов
/ 01 февраля 2010

преобразовать в метрику

0 голосов
/ 01 февраля 2010

Эти значения неявно преобразуются в значения с плавающей точкой где-то в вашем коде. Вам нужно найти эту строку и переписать ее, чтобы сохранить тип строки. Используете ли вы эти значения в математических выражениях, например?

0 голосов
/ 01 февраля 2010

Вы можете попробовать использовать printf

$a = 5.10;

echo $a;            // prints 5.1

printf("%.2f",$a);  // prints 5.10
0 голосов
/ 01 февраля 2010

Да, это Сеттип

settype($bar, "string");  // $bar is now "1" (string)

Wait. Как 0 в 5,10 опережает ноль?

У меня не получается читать комп. printf / sprintf будет работать лучше в случае, когда вы форсируете 2 значащие цифры, независимо от того, равен ли трейлинг нулю.

0 голосов
/ 01 февраля 2010

Вы можете разыграть его вручную, используя printf() или sprintf()

(Ссылки появятся в ближайшее время)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...