- Удалить бесполезные нулевые цифры из десятичных знаков в PHP
- Этот код удалит нуль после точки и вернет только две десятичные цифры.
- PHP УБРАТЬ МИНУС
- Php как убрать минус
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- User Contributed Notes 1 note
- Как удалить конечные нули в PHP
Удалить бесполезные нулевые цифры из десятичных знаков в PHP
Я пытаюсь найти быстрый способ удалить zero decimals числа из числа таких значений:
echo cleanNumber('125.00'); // 125 echo cleanNumber('966.70'); // 966.7 echo cleanNumber(844.011); // 844.011
Существует ли какой-то оптимизированный способ сделать это?
echo 125.00 + 0; // 125 echo '125.00' + 0; // 125 echo 966.70 + 0; // 966.7
Внутри это эквивалентно кастингу для float с (float)$num или floatval($num) но я нахожу его более простым.
вы можете просто использовать функцию floatval
echo floatval('125.00'); // 125 echo floatval('966.70'); // 966.7 echo floatval('844.011'); // 844.011
Просто добавление + к вашей строковой переменной приведет к приведению типа (float) и удалению нулей:
echo +'125.00'; // 125 echo +'966.70'; // 966.7 echo +844.011; // 844.011 var_dump(+'844.011asdf'); // double(844.011)
function TrimTrailingZeroes($nbr)
NB Это предполагает . является десятичным разделителем. Преимущество состоит в том, что он будет работать на сколь угодно больших (или малых) числах, так как нет плавающего броска. Он также не будет превращать числа в научную нотацию (например, 1.0E-17).
Вы должны указать свои числа как плавающие, которые сделают это для вас.
$string = "42.422005000000000000000000000000"; echo (float)$string;
Результатом этого будет то, что вы ищете.
$x = '100.10'; $x = preg_replace("/\.?0*$/",'',$x); echo $x;
Нет ничего, что не может быть исправлено простым регулярным выражением;)
Для всех, кто приходит на этот сайт с такой же проблемой с commata, вы можете изменить:
$num = number_format($value, 1, ',', '');
$num = str_replace(',0', '', number_format($value, 1, ',', '')); // eg 100,0 becomes 100
Это помогло мне, и я думаю, что я не один.
Если необходимо удалить два нуля:
$num = str_replace(',00', '', number_format($value, 2, ',', '')); // eg 100,00 becomes 100
Подробнее здесь: Номер PHP: десятичная точка отображается только в случае необходимости
$int = 4.324000; $int = (float) $int;
Вы можете использовать функцию sprintf ()
sprintf('%g','125.00'); //125 sprintf('%g','966.70'); //966.7 sprintf('%g',844.011); //844.011
$num = '125.0100'; $index = $num[strlen($num)-1]; $i = strlen($num)-1; while($index == '0') < if ($num[$i] == '0') < $num[$i] = ''; $i--; >$index = $num[$i]; > //remove dot if no numbers exist after dot $explode = explode('.', $num); if (isset($explode[1]) && intval($explode[1]) echo $num; //125.01
решения выше являются оптимальным способом, но в случае, если вы хотите иметь свои собственные, вы можете использовать это. Что этот алгоритм запускает в конце строки и проверяет, является ли его 0 , если он задает пустую строку, а затем переходит к следующему символу с обратной стороны до тех пор, пока последний символ не будет > 0
Странно, когда я получаю номер из базы данных с типом «float» и, если мой номер – ex. 10000, когда я плаваю, он становится 1.
$number = $ad['price_month']; // 1000 from the database with a float type echo floatval($number); Result : 1
Я тестировал все вышеперечисленные решения, но не работал.
Это мое маленькое решение … Может быть включено в класс и задавать vars
private $ dsepparator = ‘.’; private $ tsepparator = ‘,’;
Это может быть задано конструктором и изменено для пользователей lang.
public function numberOmat($amount, $decimals = 2, $hideByZero = false) < return ( $hideByZero === true AND ($amount-floor($amount)) dsepparator, $this->tsepparator) : number_format($amount, $decimals, $this->dsepparator, $this->tsepparator); >
$value = preg_replace('~\.0+$~','',$value);
print (floatval)(number_format( $Value), 2 ) );
$str = 15.00; $str2 = 14.70; echo rtrim(rtrim(strval($str), "0"), "."); //15 echo rtrim(rtrim(strval($str2), "0"), "."); //14.7
Из-за этого вопрос старый. Во-первых, я сожалею об этом.
Вопрос о числе xxx.xx, но в случае, если это x, xxx.xxxxx или разностный десятичный разделитель, такой как xxxx, xxxx, это может быть сложнее найти и удалить нулевые цифры из десятичного значения.
/** * Remove zero digits from decimal value. * * @param string|int|float $number The number can be any format, any where use in the world such as 123, 1,234.56, 1234.56789, 12.345,67, -98,765.43 * @param string The decimal separator. You have to set this parameter to exactly what it is. For example: in Europe it is mostly use "," instead of ".". * @return string Return removed zero digits from decimal value. */ function removeZeroDigitsFromDecimal($number, $decimal_sep = '.') < $explode_num = explode($decimal_sep, $number); if (is_array($explode_num) && isset($explode_num[count($explode_num)-1]) && intval($explode_num[count($explode_num)-1]) === 0) < unset($explode_num[count($explode_num)-1]); $number = implode($decimal_sep, $explode_num); >unset($explode_num); return (string) $number; >
с/** * Remove zero digits from decimal value. * * @param string|int|float $number The number can be any format, any where use in the world such as 123, 1,234.56, 1234.56789, 12.345,67, -98,765.43 * @param string The decimal separator. You have to set this parameter to exactly what it is. For example: in Europe it is mostly use "," instead of ".". * @return string Return removed zero digits from decimal value. */ function removeZeroDigitsFromDecimal($number, $decimal_sep = '.') < $explode_num = explode($decimal_sep, $number); if (is_array($explode_num) && isset($explode_num[count($explode_num)-1]) && intval($explode_num[count($explode_num)-1]) === 0) < unset($explode_num[count($explode_num)-1]); $number = implode($decimal_sep, $explode_num); >unset($explode_num); return (string) $number; >
с/** * Remove zero digits from decimal value. * * @param string|int|float $number The number can be any format, any where use in the world such as 123, 1,234.56, 1234.56789, 12.345,67, -98,765.43 * @param string The decimal separator. You have to set this parameter to exactly what it is. For example: in Europe it is mostly use "," instead of ".". * @return string Return removed zero digits from decimal value. */ function removeZeroDigitsFromDecimal($number, $decimal_sep = '.') < $explode_num = explode($decimal_sep, $number); if (is_array($explode_num) && isset($explode_num[count($explode_num)-1]) && intval($explode_num[count($explode_num)-1]) === 0) < unset($explode_num[count($explode_num)-1]); $number = implode($decimal_sep, $explode_num); >unset($explode_num); return (string) $number; >
$numbers = [ 1234,// 1234 -1234,// -1234 '12,345.67890',// 12,345.67890 '-12,345,678.901234',// -12,345,678.901234 '12345.000000',// 12345 '-12345.000000',// -12345 '12,345.000000',// 12,345 '-12,345.000000000',// -12,345 ]; foreach ($numbers as $number) < var_dump(removeZeroDigitsFromDecimal($number)); >echo '
'."\n\n\n"; $numbers = [ 1234,// 12324 -1234,// -1234 '12.345,67890',// 12.345,67890 '-12.345.678,901234',// -12.345.678,901234 '12345,000000',// 12345 '-12345,000000',// -12345 '12.345,000000',// 12.345 '-12.345,000000000',// -12.345 '-12.345,000000,000',// -12.345,000000 STRANGE!! but also work. ]; foreach ($numbers as $number)
Этот код удалит нуль после точки и вернет только две десятичные цифры.
$ Число = 1200.0000;
str_replace (‘. 00’, », number_format ($ number, 2, ‘.’, »));
Выход будет: 1200
PHP УБРАТЬ МИНУС
Первый способ — использование функции abs(). Эта функция возвращает абсолютное значение числа, то есть числа без знака. Например:
$number = -5;
echo abs($number); // Output: 5
Второй способ — использование условных конструкций. Можно проверить, является ли число отрицательным, и если да, то умножить его на -1. Например:
Третий способ — использование функции intval(). Эта функция возвращает целочисленное значение переменной, то есть отбрасывает дробную часть и знак числа. Например:
$number = -5.7;
$number = intval($number);
echo $number; // Output: 5
Четвертый способ — использование функции sprintf(). Эта функция форматирует строку, заменяя указанные спецификаторы формата значениями переменных. Например:
$number = -5;
$positive_number = sprintf(«%d», abs($number));
echo $positive_number; // Output: 5
Пятый способ — использование регулярных выражений. Можно использовать preg_replace() для замены всех минусов на пустую строку. Например:
$number = -5;
$positive_number = preg_replace(«/[^0-9]/», «», $number);
echo $positive_number; // Output: 5
PHP — зачем его учить, что на нем пишут, зарплаты, фреймворки
КАК БЕЗ ПЕРЕЗАГРУЗКИ СТРАНИЦЫ СДЕЛАТЬ ЗАПРОС
Сатья. Я ничего не должна мужчинам
Почему PHP это УЖАСНЫЙ язык программирования?
Реальное собеседование на Junior PHP разработчика
#54 Уроки PHP — Учим язык PHP, Наследование и перегрузка методов на языке PHP
Не бойтесь регулярных выражений. Regex за 20 минут!
Правила написания простого.и понятного кода на PHP — Clean Code
PHP в 2023 — плюсы и минусы языка — Первый Бит
Php как убрать минус
abs — Абсолютное значение (модуль числа)
Описание
Возвращает абсолютное значение num .
Список параметров
Возвращаемые значения
Абсолютное значение num . Если тип аргумента num — float , то возвращаемый тип также float , иначе — int (тип float обычно имеет больший диапазон значений, чем тип int ).
Список изменений
Версия | Описание |
---|---|
8.0.0 | num больше не принимает внутренние объекты, поддерживающие числовое преобразование. |
Примеры
Пример #1 Пример использования abs()
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 1 note
$qty = 1000 ;
$arr = array();
for ( $i = 0 ; $i < $qty ; $i ++)$arr [] = rand (- 100 , 100 );
>
$start = microtime ( true );
for ( $i = 0 ; $i < $qty ; $i ++)foreach ( $arr as $v ) $v = abs ( $v );
>
>
echo number_format ( microtime ( true ) — $start , 4 ). ‘
‘ ;
$start = microtime ( true );
for ( $i = 0 ; $i < $qty ; $i ++)foreach ( $arr as $v ) if ( $v < 0 ) $v = abs ( $v );
>
>
echo number_format ( microtime ( true ) — $start , 4 ). ‘
‘ ;
$start = microtime ( true );
for ( $i = 0 ; $i < $qty ; $i ++)foreach ( $arr as $v ) if ( $v < 0 ) $v *= - 1 ;
>
>
echo number_format ( microtime ( true ) — $start , 4 ). ‘
‘ ;
?>
Result:
PHP 7.1.33
0.0910
0.0710
0.0550
Conclusion: better to check before using the feature that the number is less than zero. Even better use multiplication by -1 than this function.
Как удалить конечные нули в PHP
Привет, может кто-нибудь дать мне объяснение (и, возможно, пример) относительно того, как я могу поменять десчь нулей из числа с помощью PHP.
"Lat":"37.422005000000000000000000000000","Lon":"-122.84095000000000000000000000000"
Я пытаюсь уничтожить нули, чтобы сделать его более читаемым. Я попытался использовать str_replace() но это заменило нули внутри номера (doh).
Забудьте все rtrims и регулярные выражения, координаты – float и должны рассматриваться как float, просто добавьте переменную с помощью (float) чтобы передать ее из строки в float:
$string = "37.422005000000000000000000000000"; echo (float)$string;
Фактический результат, который у вас есть, – это поплавки, но переданные вам в виде строк из-за HTTP-протокола, хорошо включить их в свою естественную форму для выполнения расчетов и т. Д.
Примечание . Что касается комментария о точности с плавающей запятой в PHP, см. Это: https://stackoverflow.com/a/3726761/353790
Если у вас есть десятичное число, заканчивающееся на 0 (например, 123 000), вы также можете удалить десятичный разделитель , который может отличаться в зависимости от используемого языка . Чтобы надежно удалить его, вы можете сделать следующее:
$number = rtrim($number, "0"); $locale_info = localeconv(); $number = rtrim($number, $locale_info['decimal_point']);
Это, конечно, не пуленепробиваемое решение и, возможно, не самое лучшее. Если у вас есть номер, например, 12300.00, он не удалит конечные 0 из целой части, но вы можете адаптировать его к вашим конкретным потребностям.
У вас будет много проблем, если вы попробуете подрезку или другие манипуляции с строками. Попробуйте это.
$string = "37.422005000000000000000000000000"; echo $string + 0;
Вы также можете использовать floatval(val); ,