PHP에서 후행 0을 제거하는 방법
PHP를 사용하여 숫자에서 후행 0을 제거하는 방법에 대한 설명(그리고 예를 들어)을 받을 수 있을까요?
예를 들어 다음과 같습니다.
"Lat":"37.422005000000000000000000000000","Lon":"-122.84095000000000000000000000000"
제출처:
"Lat":"37.422005","Lon":"-122.84095"
나는 그것을 더 읽기 쉽게 하기 위해 0을 제거하려고 노력하고 있다.나는 그것을 사용해봤어요.str_replace()
숫자 안에 있는 0도 대체했습니다.
모든 rtrim과 정규 표현식 좌표는 플로트이며 플로트로 취급해야 합니다.변수 앞에 다음 값을 붙입니다.(float)
현에서 플로트로 주조하는 방법:
$string = "37.422005000000000000000000000000";
echo (float)$string;
출력:
37.422005
실제 결과는 플로트이지만 HTTP 프로토콜로 인해 문자열로 전달되므로 계산 등을 위해 자연스러운 형태로 되돌리는 것이 좋습니다.
테스트 케이스: 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']);
물론 이 솔루션은 방탄 솔루션이 아니며 최선의 솔루션이 아닐 수도 있습니다.12300.00과 같은 숫자가 있는 경우 정수 부분에서 말미의 0이 제거되지는 않지만 특정 요구에 맞게 조정할 수 있습니다.
트리밍이나 다른 스트링 조작을 시도하면 곤란합니다.이렇게 해봐.
$string = "37.422005000000000000000000000000";
echo $string + 0;
출력:
37.422005
제 경우, 다음과 같이 다른 답변을 여기에 추가 답변은 여기에 기재되어 있습니다.
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
내가 보기엔 제대로 보여주지 않는군
또한 최신 편집에서는 소수점이 발견될 경우 맨 오른쪽의 0만 트리밍하여 "100"과 같은 숫자가 1로 rtrim'되지 않도록 합니다.
를 사용할 수도 있습니다.floatval(val);
.
<?php
echo floatval( "37.422005000000000000000000000000" );
?>
을 낳다
37.422005
이러한 솔루션의 대부분은 "100"(후행 소수점 없음)과 같은 숫자의 유의한 자릿수를 잘라냅니다.이 문제가 없는 간단한 솔루션을 다음에 제시하겠습니다.
function TrimTrailingZeroes($nbr) {
if(strpos($nbr,'.')!==false) $nbr = rtrim($nbr,'0');
return rtrim($nbr,'.') ?: '0';
}
나는 그것이 모든 다른 시나리오를 망라한다고 생각한다.
>>> 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"
초과된 0을 끝에서 특정 소수점까지만 제거하는 경우 이 표현은 유용합니다(예를 들어 0.300은 0.30, 0.0003000은 0.0003을 나타냅니다).
preg_replace("/(?<=\\.[0-9]{2})[0]+\$/","",$number);
물론 {2}은(는) 소수점 제한을 제어합니다.
예를 들어 100 -> 1을 변환하는 것은 원치 않지만, 0을 자르는 것은 소수점 이하입니다.또한 마침표 뒤에 0만 있는 경우에도 마침표가 삭제됩니다.
function trim_zeros($str) {
if(!is_string($str)) return $str;
return preg_replace(array('`\.0+$`','`(\.\d+?)0+$`'),array('','$1'),$str);
}
소수점 이하 자릿수의 최소값과 최대값을 수용하는 솔루션을 원하는 경우 다음과 같이 하십시오.
/**
* Displays up to 4 decimal places, with a minimum of 2 decimal places, trimming unnecessary zeroes
*
* @param mixed $number
* @param int $minimumDecimals
* @param int $maximumDecimals
* @return string
*/
function rate_format($number, int $minimumDecimals = 2, int $maximumDecimals = 4): string
{
$formatted = number_format($number, $maximumDecimals, '.', ',');
$minimumLength = strpos($formatted, '.') + $minimumDecimals + 1;
$extra = rtrim(substr($formatted, $minimumLength), "0");
return substr($formatted, 0, $minimumLength) . $extra;
}
// rate_format("1.2500") returns "1.25"
// rate_format("1.2525") returns "1.2525"
// rate_format("1.25256") returns "1.2526"
// rate_format("1") returns "1.00"
이것은 US 로케일을 사용하도록 하드 코드화되어 있습니다만, 다른 로케일에 대해서는 간단하게 조정할 수 있습니다.
숫자 조작이 가능한 라운드 함수를 사용해야 합니다.replace
.
round('37.422005000000000000000000000000', 32);
//float(37.422005)
round('-122.84095000000000000000000000000', 32);
//float(-122.84095)
반올림된 숫자는 (기본값 14) 설정에 따라 결정됩니다.
후행 0 + 천 구분 기호 제거
function specialFormat($number, $decimals = 8)
{
return rtrim(rtrim(number_format($number, $decimals), '0'), '.');
}
input: 0.00000008 => output: 0.00000008
input: 1560.1854500 => output: 1,560.18545
input: 1560.00 => output: 1,560
저는 지수값과 간단한 숫자(예: 10000)를 0이 아닌 마지막 유효 자릿수로 변환하기 위한 추가 솔루션이 필요합니다.
/* 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
rtrim() ( http://www.php.net/manual/en/function.rtrim.php )을 사용할 수 있습니다.
rtrim( "37.422005000000000000000000000000" , "0" )
소수점이 있는지 확인하세요.
음, 흥미롭군요.사용한 적이 있습니다.
// 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이 됩니다.
비교를 하고 있었기 때문에 플로트 기법으로 인해 문제가 발생했습니다.이게 도움이 될까요?
preg_replace
과가있있 있있있다다
$lat=preg_replace('/0+$/','',$lat);
언급URL : https://stackoverflow.com/questions/5149129/how-to-strip-trailing-zeros-in-php
'programing' 카테고리의 다른 글
JUnit의 장애와 오류의 차이점은 무엇입니까? (0) | 2022.09.21 |
---|---|
json과 simplejson Python 모듈의 차이점은 무엇입니까? (0) | 2022.09.21 |
유형을 지정하지 않고 Java Enum을 참조하려면 어떻게 해야 합니까? (0) | 2022.09.21 |
Gulp 태스크를 순차적으로 실행하는 방법 (0) | 2022.09.21 |
DateTimeField 날짜를 Django에서 필터링하려면 어떻게 해야 합니까? (0) | 2022.09.21 |