从PHP中的小数中删除无用的零数字

我试图find一个快速的方法来从数字值中删除zero decimals像这样:

 echo cleanNumber('125.00'); // 125 echo cleanNumber('966.70'); // 966.7 echo cleanNumber(844.011); // 844.011 

是否存在一些优化的方式来做到这一点?

$num + 0的窍门。

 echo 125.00 + 0; // 125 echo '125.00' + 0; // 125 echo 966.70 + 0; // 966.7 

在内部,这等价于使用(float)$numfloatval($num)来进行浮点floatval($num)但是我发现它更简单。

你可以使用floatval函数

 echo floatval('125.00'); // 125 echo floatval('966.70'); // 966.7 echo floatval('844.011'); // 844.011 

简单地将+添加到你的stringvariables将导致types转换(浮动)和删除零:

 echo +'125.00'; // 125 echo +'966.70'; // 966.7 echo +844.011; // 844.011 var_dump(+'844.011asdf'); // double(844.011) 

这是我使用的:

 function TrimTrailingZeroes($nbr) { return strpos($nbr,'.')!==false ? rtrim(rtrim($nbr,'0'),'.') : $nbr; } 

注意这个假设. 是小数点分隔符。 它具有的优点是它可以在任意大的(或小的)数字上工作,因为没有浮动投射。 它也不会把数字变成科学记数法(例如1.0E-17)。

你应该把你的号码作为花车,这将为你做这个。

 $string = "42.422005000000000000000000000000"; echo (float)$string; 

输出这将是你在找什么。

42.422005

 $x = '100.10'; $x = preg_replace("/\.?0*$/",'',$x); echo $x; 

没有什么不能用一个简单的正则expression式来修复;)

http://xkcd.com/208/

对于每个来到这个网站的人都有与逗号相同的问题,你可以改变:

 $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号码:小数点只有在需要时才可见

types转换为float

 $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]) <= 0) { $num = intval($explode[0]); } echo $num; //125.01 

上面的解决scheme是最佳的方式,但如果你想拥有自己的,你可以使用这个。 这个algorithm是从string的末尾开始的,并检查它是否为0 ,如果是,则设置为空string,然后从后面进入下一个字符,直到最后一个字符大于0

奇怪的是,当我用“浮动”types从数据库中得到一个数字,并且如果我的数字是ex。 10000浮动时,它变成1。

 $number = $ad['price_month']; // 1000 from the database with a float type echo floatval($number); Result : 1 

我已经testing了上述所有的解决scheme,但没有奏效。

这是我的小解决scheme…可以包括到一个class,并设置增值税

private $ dsepparator ='。'; 私人$ tsepparator =',';

这可以通过构造函数设置并更改为用户lang。

 public function numberOmat($amount, $decimals = 2, $hideByZero = false) { return ( $hideByZero === true AND ($amount-floor($amount)) <= 0 ) ? number_format($amount, 0, $this->dsepparator, $this->tsepparator) : number_format($amount, $decimals, $this->dsepparator, $this->tsepparator); } 
 $value = preg_replace('~\.0+$~','',$value); 

您可以使用:

 print (floatval)(number_format( $Value), 2 ) ); 

此代码将删除零点后,将只返回两位十进制数字。

$数= 1200.0000;
str_replace('。00','',number_format($ number,2,'。',''));

输出将是:1200