WEB언어/PHP

[PHP] 소수점 이하 2 자리까지 표시하기 (예: $ 1.10 )

saltdoll 2019. 10. 23. 16:14
반응형

미국 화폐는 센트(0.01)가 최소 기본 단위로,

소수점 이하 2자리까지 표시가 되어야 하는 경우가 많습니다.

소수점 2자리 반올림 자르기

 

소수점 2자리 표시 처리를 위한 방법과 예제

1) sprintf() 함수를 이용하는 방법

2) (추천) number_format를 이용한 방법  <= 추천방법 

3)  number_format와 sprintf()를 이용한 예제

 

number_format 방식이

가장 우리가 배운 수학적인 반올림과 내림 절삭처리를 하는 방법입니다.

 

 

1) sprintf() 함수를 이용하는 방법

PHP에서 round($_val, 2); 소수점 2자리 반올림을 하면, 뒷자리가 0을로 채워지지가 않습니다.

해당 $ 1.00 같이 뒷자리를 채우기 위해서는 srpintf() 문을 이용하면 됩니다.

$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00

 

참고: [php] 소수점 이하 2자리까지 표시

 

php - 확인 - 파이썬 소수점 자리수 버림

 

code.i-harness.com

 

 

 

 

 

2) (추천) number_format 를 이용한 방법

.75를 0.75로 변경하는 포멧 방식

number_format ('.75', 2); //결과는 0.75가 출력됩니다.

number_format(float $number [,int $decimals=0]) : string

또는

number_format(float $number ,int $decimals=0 ,string $dec_point="." ,string $thousands_sep=","):string

다음과 같은 방식으로 하면, 간단히 미국 화폐 단위로 변환이 가능합니다.

 

 

숫자형 소수점 2자리 넣기

신용카드(Credit Card)의 통신에서 미국의 돈의 값의 경우, 예로 $4.20를 보낼때, 소수점 없이 420로 많이들 보냅니다.
(미국에 가장 유명한 Web Credit Card Payment 회사: stripe.com도 이 형식을 사용중)

[stripe.com코드] amount에는 소수점을 사용하지 않습니다.

이 경우 다시금 프로그램에서 표시가 될때는 420 -> 4.20으로 환산하는 방식을 사용해야 하는데요.

간단한 공식이지만 기억이 잘 떠오르지 않을 수 가 있습니다.

(가장 적은 단위의 통화를 양의 정수화 시키는 것

= A Positive integer in the smalless currency unit)

 

간단한 공식

$_money = '420';
$_money = $_money * 0.01;
echo $_money;// 결과: 4.2

 

숫자형으로 변경한 공식까지

$_money = '400020';
$_money = number_format($_money * 0.01, 2); 
echo $_money;// 결과: 4,000.20

 

너무도 간단한 내용이지만, 이 또한 생각이 나지 않을때가 있어 메모 남겨둡니다.

 

반대의 경우 4.20 -> 400

$_money = '4.20';
$_money = $_money * 100;
echo $_money;// 결과: 420

 

 

 

 

 

3) number_format와 sprintf()를 이용한 예제

숫자를 자를때, 반올림과 절삭을 통해서 처리를 합니다.

우리가 배운 수학에서 표현되는 반올림 형태의 결과 값을 보내는 것은 

number_format()함수 입니다.

 

2개의 함수를 통한 반올림의 예제

number_format이 반올림의 대표적인 함수임을 알 수 있습니다.

Number_format의 함수에 대한 예제

<?php
$numbers = array(0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009);
foreach ($numbers as $number)
    print $number."->".number_format($number, 2, '.', ',')."<br>";
?>

0.001->0.00
0.002->0.00
0.003->0.00
0.004->0.00
0.005->0.01
0.006->0.01
0.007->0.01
0.008->0.01
0.009->0.01

 

 

 

 

참고:
Stripe Currency - Are all amounts in cents / 100ths, or does it depend on currency?
Stripe must charge in "smallest currency unit" - currently biased toward dollars/cents 

www.php.net/manual/en/function.number-format.php

 

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)