Java의 후행 0을 포함하여 최대 2 개의 소수점 (센트)의 가격을 올바르게 표시하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1734282

문제

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;
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top