2013-10-10 6 views
2

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

Я печатаю номера на экране и хочу сделать их более дружелюбными для пользователей, удалив конечные нули после десятичной точки. Я попробовал кастинг для поплавка, но это решение не очень хорошо подходит, поскольку я обрабатываю цифры, такие как 0.00000001, которые выходят по линиям с 0,1-e7, что недобросовестно для конечных пользователей.

мне нужно решение, где число как следующее ...

12.02000000 
12.00000000 
0.00000001 

... может быть распечатана на экране, как ...

12.02 
12 
0.00000001 

Использование rtim убивает числа как 10000. number_format должен знать количество десятичных знаков, которое может быть от 0 до 8. Кастинг для float не работает. Я уверен, что для этого существует некоторое регулярное выражение.

ответ

3

Вот регулярное выражение решение, как вы хотите:

$repl = preg_replace('/(?>\.0+$|(\.\d*[^0])0+$)/', '$1', $numstr); 

Тестирование:

echo preg_replace('/(?>\.0+$|(\.\d*[^0])0+$)/', '$1', '12.02000000') . "\n"; 
echo preg_replace('/(?>\.0+$|(\.\d*[^0])0+$)/', '$1', '12.00000000') . "\n"; 
echo preg_replace('/(?>\.0+$|(\.\d*[^0])0+$)/', '$1', '0.0000000100000000') . "\n"; 
echo preg_replace('/(?>\.0+$|(\.\d*[^0])0+$)/', '$1', '100000000') . "\n"; 

Выход:

12.02 
12 
0.00000001 
100000000 
+0

Это наиболее отлично, спасибо, что нашли время на это. –

+0

Добро пожаловать, рад, что это сработало для вас. – anubhava

0

После недолгого поиска интернете нашел что-то, что c ульд быть полезными:

function floattostr($val) 
{ 
    preg_match("#^([\+\-]|)([0-9]*)(\.([0-9]*?)|)(0*)$#", trim($val), $o); 
    return $o[1].sprintf('%d',$o[2]).($o[3]!='.'?$o[3]:''); 
} 

Это даст вам вывод, что нужно я думаю,

Я нашел here

1

Немного более простое решение:

preg_replace("/(\.0*[^0]+)0*|\.0*/", '\1', $number) 
0

Здесь не является регулярным выражением способ для этого:

if (strpos($number, '.') !== false) { 
    $number = rtrim($number, '.0'); 
} 

троичной стиль оператора:

$number = strpos($number, '.') !== false ? rtrim($number, '.0') : $number; 
Смежные вопросы