Java의 후행 0을 포함하여 최대 2 개의 소수점 (센트)의 가격을 올바르게 표시하는 방법은 무엇입니까?
-
20-09-2019 - |
문제
Java의 반올림 소수점에 대한 좋은 질문이 있습니다. 여기. 그러나 나는 어떻게 내 프로그램에 가격을 표시하기 위해 후행 0을 포함시킬 수 있는지 궁금했다 : $ 1.50, $ 1.00
간단한 솔루션
String.format("%.2g%n", 0.912385);
잘 작동하지만 마지막 소수 자리에 있다면 후행 0을 생략합니다. 다음과 같은 표현식 만 사용하더라도 내 프로그램에서 문제가 발생합니다.
double price = 1.50;
다른 가격으로 계산할 때 (추가, 곱 등) 결과는 주로 다음과 같이 표시됩니다.
$2.5000000000000003
따라서 string을 사용 하여이 목적으로 잘 작동하지만 위의 예를 잘라냅니다.
$2.5
두 번째 소수점에서 후행 0을 보여주는 적절한 방법이 있습니까? 또는 계산의 출력이
$2.00
해결책
나는 당신이 이것을하는 것이 좋습니다 :
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));
이것은 Locale에 따른 미덕도 있습니다. 예를 들어 미국 대신 유로 존에있는 경우 작동합니다.
다른 팁
다른 답변은 완벽하게 유효하지만 (특히 Duffymo의 것), 디스플레이를 형식화하는 것보다 훨씬 큰 문제가 있습니다. 당신은 실제로 완전히 사용하고 있습니다 잘못된 돈 금액을 입력하십시오 이산 값. 대신 a double
, 당신은 실제로 사용을 고려해야합니다 java.lang.BigDecimal
.
(편집 : ... 또는 Duffymo가 주석에서 지적한대로 잘 구현 된 머니 클래스, 예를 들어 JScience 's의 클래스 통화의 모듈 또는 더 최근 조다 돈 - 여전히 공식 버전으로 출시되어야합니다.)
string.format (...)로 수행 할 수 있지만 사용할 수 있습니다. DecimalFormat
:
double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50
시도 했습니까?
String s = String.format("$%.2f", 2.50);
그것은 트릭을 할 것입니다.
public static String getFormattedData(String actualString)
{
String subString = "0.0";
if(actualString.contains("."))
{
subString = actualString.substring(actualString.indexOf("."), actualString.trim().length());
if(Double.parseDouble(subString) > 0.0)
return actualString;
else
actualString = actualString.substring(0, actualString.indexOf("."));
}
return actualString;
}