如何去除PHP中的尾随零

嗨,任何人都可以给我一个解释(也许是一个例子),我将如何去剥离使用PHP的数字尾随零。

例如:

"Lat":"37.422005000000000000000000000000","Lon":"-122.84095000000000000000000000000" 

将被转入:

 "Lat":"37.422005","Lon":"-122.84095" 

我试图剥离零,使其更具可读性。 我尝试使用str_replace()但这也取代了数字中的零(doh)。

谢谢= D

忘了所有的rtrims和正则expression式,坐标都是浮点数,应该被当作浮点数,只需在(float)前面加上一个string将其转换为浮点数:

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

输出:

 37.422005 

你得到的实际结果是浮动的,但是由于HTTP协议而作为string传递给你,最好把它们变回自然forms来做计算等等。

testing用例: http : //codepad.org/TVb2Xyy3

注意 :有关PHP中浮点精度的注释,请参阅: https : //stackoverflow.com/a/372​​6761/353790

尝试使用rtrim :

 $number = rtrim($number, "0"); 

如果你有一个以0结尾的十进制数(例如123.000),你可能还想删除小数点分隔符根据使用的语言环境 ,这可能会有所不同 。 要可靠地删除它,您可以执行以下操作:

 $number = rtrim($number, "0"); $locale_info = localeconv(); $number = rtrim($number, $locale_info['decimal_point']); 

这当然不是一个防弹的解决scheme,可能不是最好的。 如果你有一个像12300.00这样的数字,它不会从整数部分中删除尾部的0,但是你可以根据你的具体需要来调整它。

如果尝试修剪或其他string操作,会遇到很多麻烦。 试试这个方法。

 $string = "37.422005000000000000000000000000"; echo $string + 0; 

输出:

 37.422005 

你也可以使用floatval(val);

  <?php echo floatval( "37.422005000000000000000000000000" ); ?> 

结果是

37.422005

我知道这个问题在2012年被问到,但是,我刚刚遇到这个简单的解决scheme…

 $result = $num + 0; 

所以对于这个问题将是:

 $lat = 37.422005000000000000000000000000 + 0; //37.422005 $lon = -122.84095000000000000000000000000 + 0; //-122.84095 

如果你想从最后去除多余的零,但只能到一个小数点,这是一个有用的expression式来做到这一点(例如,0.30000将显示0.30和0.0003000将显示0.0003)。

 preg_replace("/(?<=\\.[0-9]{2})[0]+\$/","",$number); 

当然,{2}控制着小数点的限制。

在我的情况下,我做了以下,在这里扩展其他答案:

 rtrim((strpos($number,".") !== false ? rtrim($number, "0") : $number),"."); 

因为如果显示一个整数,我也必须删除小数

作为一个例子,这将显示以下数字

 2.00, 1.00, 28.50, 16.25 

 2, 1, 28.5, 16.25 

而不是

 2., 1., 28.5, 16.25 

对我来说,没有正确显示它们。

如果遇到小数点,最新的编辑也会将诸如“100”之类的数字从rtrim变为1,只修整最右边的0。

修剪尾随零,但只能在小数点后面 – 例如,我们不想转换100 – > 1。 如果只有零符合,它也会剥离这个时期。

 function trim_zeros($str) { if(!is_string($str)) return $str; return preg_replace(array('`\.0+$`','`(\.\d+?)0+$`'),array('','$1'),$str); } 

大多数这些解决scheme将修剪有效数字,如“100”(无尾随小数)。 这是一个简单的解决scheme,没有这个问题:

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

你应该使用更容易操作数字的replace 函数 。

嗯,有趣。 我用过这个:

 // remove leading zeros $output = ltrim ($output, "0"); // remove trailing 0s. $temp=explode(".",$output); $temp[1]=rtrim($temp[1],"0"); $output = $temp[0]; if (!empty($temp[1])) $output.='.'.$temp[1]; return $output; 

这会从第一个小数点后面的数字中删除尾部0。 否则像100这样的数字变成1。

由于我正在做比较,使用浮法技术造成了问题。 希望这可以帮助?

类似于Okonomiyaki3000的答案,而不是添加你也可以乘以1,像

 $string = "37.422005000000000000000000000000"; echo $string*1;die; // outputs - 37.422005 

你可以使用rtrim()( http://www.php.net/manual/en/function.rtrim.php ):

 rtrim( "37.422005000000000000000000000000" , "0" ) 

只要确保会有小数点。

对于我来说,我需要一个进一步的解决scheme来将指数值和简单数字(如10000)转换为最后一个非零有效数字

 /* Convert any value to the least significant value */ function toDecimal($val) { // Convert any exponential sign to proper decimals $val = sprintf("%lf", $val); if (strpos($val, '.') !== false) { $val = rtrim(rtrim($val, '0'), '.'); } return $val; } // Test cases echo toDecimal(1000.000) . "\n"; echo toDecimal(1E-5) . "\n"; echo toDecimal(1E+5) . "\n"; echo toDecimal(1234.56) . "\n"; echo toDecimal(1234.5700) . "\n"; echo toDecimal(1234000) . "\n"; echo toDecimal(-1e10) . "\n"; // Results 1000 0.00001 100000 1234.56 1234.57 1234000 -10000000000 

preg_replace将做的伎俩:

 $lat=preg_replace('/0+$/','',$lat);