嗨,任何人都可以给我一个解释(也许是一个例子),我将如何使用PHP从数字中删除尾随的零.
例如:
"Lat":"37.422005000000000000000000000000","Lon":"-122.84095000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)
将转入:
"Lat":"37.422005","Lon":"-122.84095"
Run Code Online (Sandbox Code Playgroud)
我试图剥离零,使其更具可读性.我尝试使用str_replace()
但是这也取代了数字中的零(doh).
谢谢= D
Rob*_*itt 119
忘记所有的rtrims,正则表达式,坐标是浮点数,应该被视为浮点数,只需将变量前置为(float)
从字符串转换为浮点数:
$string = "37.422005000000000000000000000000";
echo (float)$string;
Run Code Online (Sandbox Code Playgroud)
输出:
37.422005
Run Code Online (Sandbox Code Playgroud)
您拥有的实际结果是浮点数,但由于HTTP协议而作为字符串传递给您,最好将它们转换回自然形式以进行计算等.
测试用例:http://codepad.org/TVb2Xyy3
注意:关于PHP中浮点精度的注释,请参阅:https://stackoverflow.com/a/3726761/353790
jwe*_*ich 30
尝试使用rtrim:
$number = rtrim($number, "0");
Run Code Online (Sandbox Code Playgroud)
如果您有一个终止于0的十进制数(例如123.000),您可能还想删除小数分隔符,根据使用的区域设置,它可能会有所不同.要可靠地删除它,您可以执行以下操作:
$number = rtrim($number, "0");
$locale_info = localeconv();
$number = rtrim($number, $locale_info['decimal_point']);
Run Code Online (Sandbox Code Playgroud)
这当然不是防弹解决方案,可能不是最好的解决方案.如果您有一个类似12300.00的数字,它不会从整数部分删除尾随的0,但您可以根据您的特定需要进行调整.
Oko*_*000 25
如果你尝试修剪或其他字符串操作,你会遇到很多麻烦.试试这种方式.
$string = "37.422005000000000000000000000000";
echo $string + 0;
Run Code Online (Sandbox Code Playgroud)
输出:
37.422005
Run Code Online (Sandbox Code Playgroud)
你也可以使用floatval(val);
.
<?php
echo floatval( "37.422005000000000000000000000000" );
?>
Run Code Online (Sandbox Code Playgroud)
结果是
37.422005
就我而言,我执行了以下操作,并在此处扩展了其他答案:
rtrim((strpos($number,".") !== false ? rtrim($number, "0") : $number),".");
Run Code Online (Sandbox Code Playgroud)
因为如果显示整数,我还必须删除小数
例如,这将显示以下数字
2.00, 1.00, 28.50, 16.25
Run Code Online (Sandbox Code Playgroud)
作为
2, 1, 28.5, 16.25
Run Code Online (Sandbox Code Playgroud)
而不是
2., 1., 28.5, 16.25
Run Code Online (Sandbox Code Playgroud)
对我来说,这没有正确显示它们。
最新编辑还通过仅在遇到小数时修剪最右边的 0 来阻止诸如“100”之类的数字被 rtrim'ed 为 1。
小智 6
如果您想从末尾去除多余的零,但只去除到特定的小数位,这是一个有用的表达式来实现这一点(例如 0.30000 将显示 0.30,0.0003000 将显示 0.0003)。
preg_replace("/(?<=\\.[0-9]{2})[0]+\$/","",$number);
Run Code Online (Sandbox Code Playgroud)
当然,{2} 控制小数位数限制。
这些解决方案中的大多数都将修剪数字中的有效数字,例如“ 100”(无尾随十进制)。这是一个没有问题的简单解决方案:
function TrimTrailingZeroes($nbr) {
if(strpos($nbr,'.')!==false) $nbr = rtrim($nbr,'0');
return rtrim($nbr,'.') ?: '0';
}
Run Code Online (Sandbox Code Playgroud)
我认为这涵盖了所有不同的情况。
>>> TrimTrailingZeroes('0')
=> "0"
>>> TrimTrailingZeroes('01')
=> "01"
>>> TrimTrailingZeroes('01.0')
=> "01"
>>> TrimTrailingZeroes('01.01')
=> "01.01"
>>> TrimTrailingZeroes('01.010')
=> "01.01"
>>> TrimTrailingZeroes('.0')
=> "0"
>>> TrimTrailingZeroes('.1')
=> ".1"
>>> TrimTrailingZeroes('.10')
=> ".1"
>>> TrimTrailingZeroes('3141592653589793.238462643383279502880000000000000000000000000000')
=> "3141592653589793.23846264338327950288"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52492 次 |
最近记录: |