채택완료

소수점 표시 질문 드립니다.

2020-08-28 (금) 11:57:14 2,677

안녕하세요.

소수점 표현하는데 있어 에로사항이 있어 질문 드립니다.

예를들어 50000.111에 자릿수 ,를 찍어야 해서  number_format을 사용하면 50,000으로 출력이 되어서 number_format(50000.111 , 3)을 하면 50,000.111이 출력이 되는데 문제는 소수점이 없을경우 50,000.000이 출력이 되어버린다는 겁니다...

소수점이 없는 숫자일경우는 출력이 안되도록 50,000만 출력이 되고 소수가 있을경우에만 50,000.111 이렇게 표시하려면 어떤 방법으로 해야될까요?

|

답변 5개

채택된 답변
+20 포인트
2020-08-28 (금) 12:19:56

아래처럼 함수를 만들고 조건문 사용하시면 됩니다.

Copy
function x_number_format ($number , $decimals = 0 , $dec_point = "." , $thousands_sep = ",") {
    if(!is_numeric($number)) return;

    if(is_float($number)) {
        return number_format($number, $decimals, $dec_point, $thousands_sep);
    } else {
        return number_format($number, 0, $dec_point, $thousands_sep);
    }
}

echo x_number_format(50000.111, 3);
echo "\n";
echo x_number_format(50000, 3);
echo "\n";

$nn= 50000;

echo is_float($ nn)? number_format($nn, 3) : number_format($nn);

결과는 아래와 같습니다

$nn=50000 ==> 50,000

$nn=50000.123 ==> 50,000.123

$nn=50000.1234 ==> 50,000.123

$nn=50000.1235 ==> 50,000.124

$nn=50000.12 ==> 50,000.120

2020-08-28 (금) 13:15:53
Copy
// 참고로 정규식으로 .000으로 끝나면 제거하는 방법 남깁니다.

echo preg_replace('/\.0+$/', '', number_format('50000.111', 3)); // 50,000.111

echo preg_replace('/\.0+$/', '', number_format('50000', 3)); // 50,000

방법이야 많이 있겠지만 

$num = 50000.111;
$num = sprintf('%0.3f', $num);
$num = number_format ($num, 3);

echo $num; // 결과값 : 50,000.111

값의 나머지를 체크해서   나머지가 0이면

값만 넘기고

0이 아니면

소수점 포함해서 찍도로 넘겨주면 어떨까요?

답변을 작성하려면 로그인이 필요합니다.