programing

PHP에서 후행 0을 제거하는 방법

procenter 2022. 9. 21. 22:37
반응형

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

반응형