소수점 2자리 PHP float: .00
다음 유형을 캐스팅할 때:
(float) '0.00';
알겠습니다.0
. 어떻게 하면 될까요?0.00
데이터 유형을 플로트로 여전히 가지고 있습니까?
플로트는 없어요0
아니면0.00
: 내부(IEEE754) 이진 형식의 서로 다른 문자열 표현이지만 플로트는 동일합니다.
플로트를 "0.00"으로 표현하려면 number_format을 사용하여 문자열로 포맷해야 합니다.
$numberAsString = number_format($numberAsFloat, 2);
PHP가 이를 해결할 수 있는 해결책은 없는 것으로 알고 있습니다.이 스레드에서 제공되는 다른 모든(위와 아래) 답변은 말도 안 됩니다.
number_format 함수는 PHP.net 자체 사양에 기록된 결과 문자열을 반환합니다.
floatval/doubleval과 같은 함수는 값 3.00으로 지정하면 정수를 반환합니다.
타자 저글링을 하면 결과적으로 정수가 나옵니다.
라운드()를 사용하면 결과적으로 정수를 얻을 수 있습니다.
내가 생각할 수 있는 유일한 해결책은 당신의 데이터베이스를 이용해서 이동하는 것입니다.MySQL 예:
SELECT CAST('3.00' AS DECIMAL) AS realFloatValue;
문자열 대신 플로팅을 반환하는 추상화 레이어를 사용하여 이 작업을 실행하면 됩니다.
JSON 출력 수정
JSON 출력을 2 데시멘탈로 고정하는 솔루션을 찾고 있다면 아래 코드와 같이 후포맷을 사용할 수 있습니다.
// PHP AJAX Controller
// some code here
// transform to json and then convert string to float with 2 decimals
$output = array('x' => 'y', 'price' => '0.00');
$json = json_encode($output);
$json = str_replace('"price":"'.$output['price'].'"', '"price":'.$output['price'].'', $json);
// output to browser / client
print $json;
exit();
클라이언트/브라우저로 돌아갑니다.
{"x":"y","price":0.00}
0.00은 실제로 0입니다.에코할 때 0.00이 필요한 경우 number_format을 다음과 같이 사용합니다.
number_format($number, 2);
플로트 번호를 표시할 수 있습니다.
- 소수점이 일정한
- 특정 형식(현지화)으로
예.
$myNonFormatedFloat = 5678.9
$myGermanNumber = number_format($myNonFormatedFloat, 2, ',', '.'); // -> 5.678,90
$myAngloSaxonianNumber = number_format($myNonFormatedFloat, 2, '.', ','); // -> 5,678.90
참고하세요.
첫 번째 인수는 서식을 지정할 플로트 번호입니다.
두번째 인수는 소수점의 개수입니다.
세번째 논변은 소수점을 시각적으로 구분할 때 사용하는 문자입니다.
네번째 논변은 수천명을 시각적으로 구분할때 사용하는 문자입니다.
사용.number_format()
숫자가 표시되는 방식을 변경하는 함수.그것은 a를 돌려줄 것입니다.string
, 원래 변수의 유형은 영향을 받지 않습니다.
이거 먹어봐요.
$nom="5695.5";
number_format((float)($nom), 2, '.', ','); // -> 5,695.50
$nom="5695.5215";
number_format((float)($nom), 2, '.', ','); // -> 5,695.52
$nom="5695.12";
number_format((float)($nom), 0, '.', ','); // -> 5,695
//주변에 사용
$nom="5695.12";
number_format((float)round($nom), 2, '.', ','); // -> 5,695.00
$nom="5695.52";
number_format((float)round($nom), 2, '.', ','); // -> 5,696.00
당신은 이것을 시도해 볼 수 있습니다, 그것은 당신에게 효과가 있을 것입니다.
number_format(0.00, 2)
이 페이지의 많은 의견이 질문의 형식이 잘못되었다는 기본적인 요점을 놓쳤습니다.부동 소수점은 효율적인 계산을 위해 설계된 이진법 표현입니다. 기본적으로 어떤 종류의 십진 숫자 개념도 없습니다.
그래서 이렇게 묻습니다.
"0"이 아닌 "0.00"을 얻을 수 있으면서도 데이터 유형을 플로트로 사용하려면 어떻게 해야 합니까?
이런 질문을 하는 것과 같습니다.
어떻게 하면 "zwei" 대신 "deux"를 얻을 수 있으면서도 영어로서의 언어를 가질 수 있을까요?
입력을 "2"로 지정하든, "2.0"으로 지정하든, "2.000000000"으로 지정하든 부동 소수점 값을 요청하든 메모리에 저장되는 것은 다음과 같습니다(IEEE 754 이중 정밀도).
0100000000000000000000000000000000000000000000000000000000000000
정수로 변환하면 메모리에 저장된 값은 다음과 같습니다(64비트 시스템 가정).
0000000000000000000000000000000000000000000000000000000000000010
(이 문맥에서 "정수"는 "전체 숫자"의 동의어일 뿐만 아니라, 메모리에서 값을 표현하는 방법에 대한 고유한 규칙이 있는 특정 데이터 유형입니다.)
대조적으로 문자열 "2"는 다음과 같습니다.
00110010
그리고 "2.00"이란 문자열은 다음과 같습니다.
00110010001011100011000000110000
(PHP 프로그램에서는 실제로 메모리에 유형 지시자와 같은 추가 정보가 있지만 여기서는 관련이 없습니다.)
따라서 질문은 부동 소수점 숫자의 입력이 주어졌을 때 소수점 숫자가 고정된 문자열 표현을 어떻게 선택해야 하는지 변환으로 다시 구해야 합니다.
다른 사람들이 지적한 것처럼, 그에 대한 답은 number_format을 사용하는 것입니다.
질문에 JSON이 언급되지 않았지만 여러 댓글이 언급되어 있으므로 PHP의 json_encode 기능에 옵션이 있음도 지적하겠습니다.JSON_PRESERVE_ZERO_FRACTION
부동 을 갖는 , ".0" 합니다)를합니다.
$example = ['int' => 2, 'float' => 2.0];
echo json_encode($example);
# => {"int":2,"float":2}
echo json_encode($example, JSON_PRESERVE_ZERO_FRACTION);
# => {"int":2,"float":2.0}
다시 말하지만, 이것은 값의 문자열 표현입니다.
라운드 기능을 사용하실 수 있습니다.
round("10.221",2);
10.22를 반환합니다.
합니다.floatval()
이거 먹어봐요.
$result = number_format($FloatNumber, 2);
이 간단한 기능을 사용할 수 있습니다.number_format()
$num = 2214.56;
// default english notation
$english_format = number_format($num);
// 2,215
// French notation
$format_francais = number_format($num, 2, ',', ' ');
// 2 214,56
$num1 = 2234.5688;
// English notation with thousands separator
$english_format_number = number_format($num1,2);
// 2,234.57
// english notation without thousands separator
$english_format_number2 = number_format($num1, 2, '.', '');
// 2234.57
플로트 값을 포맷하면 데이터 유형을 문자열로 변경하는 것을 의미합니다.따라서 임의의 양/플로트 값에 서식을 적용하면 점, 쉼표 등 가능한 모든 표기법으로 설정됩니다.예를들면
(float)0.00 => (string)'0.00',
(float)10000.56 => (string) '10,000.56'
(float)5000000.20=> (string) '5,000,000.20'
따라서 논리적으로 포맷 후 플로트 데이터 유형을 유지하는 것은 불가능합니다.
언급URL : https://stackoverflow.com/questions/12706519/php-float-with-2-decimal-places-00
'IT' 카테고리의 다른 글
Yoast 변수를 사용하여 페이지 내에서 Yoast 제목을 가져올 수 있는 방법이 있습니까? (즉, %%title%%) (0) | 2023.09.25 |
---|---|
스타일을 한 번에 여러 개의 수업에 적용하려면 어떻게 해야 합니까? (0) | 2023.09.25 |
Path variables in Spring WebSockets @SendTo mapping (0) | 2023.09.25 |
Oracle에서 SQL Server 게시 (0) | 2023.09.20 |
Pandas 데이터 프레임의 목록을 기준으로 색인된 행의 순서를 변경하는 방법 (0) | 2023.09.20 |