如何去除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/3726761/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);