[英]Remove trailing zeros from a string
我想根據以下規則刪除尾隨零:
例子:
我考慮過以下幾點:
if (substr($number, -2) == '00') return substr($number, 0, 4);
if (substr($number, -1) == '0') return substr($number, 0, 5);
return $number;
有沒有更好的方法來做到這一點?
我認為這應該有效:
return preg_replace('/0{1,2}$/', '', $number);
$strings = array ('1.4000', '1.4100', '1.4130', '1.4136', '1.4001', '1.0041');
foreach ($strings as $number) {
echo "$number -> " . preg_replace('/0{0,2}$/', '', $number) . "\n";
}
生產:
1.4000 -> 1.40
1.4100 -> 1.41
1.4130 -> 1.413
1.4136 -> 1.4136
1.4001 -> 1.4001
1.0041 -> 1.0041
這是Barmar解決方案的變體,即使輸入字符串並不總是精確到4位小數,它也能正常工作。 它不會添加缺失的零,但它不會剝離任何超過它應該。
return preg_replace('/(\.[0-9]{2,}?)0*$/', '$1', $number);
舉個例子:
$strings = array(
'1.4000',
'1.4100',
'1.4130',
'1.4136',
'1.0',
'1.00',
'1.000',
'10000',
);
foreach ($strings as $number) {
$fixed = preg_replace('/(\.[0-9]{2,}?)0*$/', '$1', $number);
echo "{$number} -> {$fixed}\n";
}
輸出:
1.4000 -> 1.40
1.4100 -> 1.41
1.4130 -> 1.413
1.4136 -> 1.4136
1.0 -> 1.0
1.00 -> 1.00
1.000 -> 1.00
10000 -> 10000
而現在,完全不同的東西......
<?php
$crlf = "\n";
$input = array('1.4000', '1.4300', '1.2340', '1.4012', '1.0034', '1.2', '1.23456');
foreach ($input as $in) {
for($n = 4; $n>2; $n--) {
$f1 = (float)round($in, $n);
$f2 = (float)round($in, $n-1);
if ($f1 !== $f2) break;
}
echo "for in = ".$in." out is ".number_format($in, $n) . $crlf;
}
?>
輸出:
for in = 1.4000 out is 1.40
for in = 1.4300 out is 1.43
for in = 1.2340 out is 1.234
for in = 1.4012 out is 1.4012
for in = 1.0034 out is 1.0034
for in = 1.2 out is 1.20
for in = 1.23456 out is 1.2346
請注意,對於格式正確的數字(小數點后正好有四位數),這將按預期運行,但在數字格式不正確時仍然會出現這種情況。 不是所要求的 - 但是擁有一個強大的解決方案往往比一個極簡主義的解決方案更好......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.