double의 소수를 형식화하는 데 문제가 있습니다. 예를 들어 4.0과 같이 이중 값이있는 경우 소수점을 대신 4.00으로 지정하려면 어떻게해야합니까?
double의 소수를 형식화하는 데 문제가 있습니다. 예를 들어 4.0과 같이 이중 값이있는 경우 소수점을 대신 4.00으로 지정하려면 어떻게해야합니까?
답변:
방법 중 하나는 NumberFormat을 사용하는 것 입니다.
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
산출:
4.00
Java 8에서는 format
방법 을 사용할 수 있습니다 .. :-
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
floating
포인트 가치 로 사용됩니다 ..2
소수점 이하는 소수점 이하 자릿수를 나타냅니다. .
대부분의 Java 버전의 경우 다음을 사용할 수 있습니다 DecimalFormat
.-
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
String.format 사용 :
String.format("%.2f", 4.52135);
문서에 따라 :
항상 사용되는 로케일은에서 반환 한 것
Locale.getDefault()
입니다.
String.format을 사용하여 다음을 수행 할 수 있습니다.
double price = 52000;
String.format("$%,.2f", price);
@Vincent의 답변과 다른 쉼표를 확인하십시오.
산출:
$52,000.00
형식화에 대한 좋은 리소스 는 주제에 대한 공식 Java 페이지입니다.
항상 정적 메서드를 사용할 수 printf from System.out
있습니다. 그런 다음 해당 포맷터를 구현합니다. 이렇게하면 다른 예제에서 수행해야하는 힙 공간이 절약됩니다.
전의:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
꽤 큰 보너스 인 힙 공간을 절약합니다. 그럼에도 불구하고 저는이 예제가 다른 어떤 답변보다 훨씬 더 관리하기 쉽다고 생각합니다. 특히 대부분의 프로그래머가 C에서 printf 함수를 알고 있기 때문에 (Java는 함수 / 메소드를 약간 변경합니다).
out
는 PrintStream
.
new DecimalFormat("#0.00").format(4.0d);
다른 방법은 클래스 의 setMinimumFractionDigits
방법을 사용하는 것입니다 NumberFormat
.
여기서 기본적으로 소수점 뒤에 표시 할 숫자 수를 지정합니다.
따라서 입력은 지정된 금액이 2라고 가정하여 4.0
생성 4.00
됩니다.
그러나 Double
입력에 지정된 양보다 많은 양이 포함 된 경우 지정된 최소 금액을 취한 다음 반올림 / 내림하여 한 자리를 더 추가합니다.
예를 들어 4.15465454
최소 2 개를 지정하면4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
이 작업을 수행 할 수있는 방법은 많습니다. 다음은 다음과 같습니다.
원래 번호가 다음과 같이 주어 졌다고 가정합니다.
double number = 2354548.235;
NumberFormat 사용 :
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
String.format 사용 :
System.out.println(String.format("%,.2f", number));
DecimalFormat 및 패턴 사용 :
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
DecimalFormat 및 패턴 사용
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
모든 경우에 출력 은 2354548.23입니다.
참고 :
반올림하는 동안 RoundingMode
포맷터에 추가 할 수 있습니다 . 다음은 다음과 같은 반올림 모드입니다.
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
수입품은 다음과 같습니다 .
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
아래 방법 중 하나를 사용할 수 있습니다.
사용하는 경우 java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
또는
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
간단한 문자열 형식으로 변환하려는 경우
System.out.println(String.format("%.2f", 4.0));
위의 모든 코드는 4.00 을 인쇄합니다.
100 % 작동합니다.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
먼저 가져 오기 NumberFormat
. 그런 다음 이것을 추가하십시오.
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
이것은 소수점 두 자리를 제공하고 통화를 처리하는 경우 달러 기호를 넣습니다.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
다음과 같이 할 수 있습니다.
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
대신에00
나는 이것이 오래된 주제라는 것을 알고 있지만 쉼표 대신 마침표를 사용하고 싶다면 결과를 X, 00으로 문자열에 저장 한 다음 기간 동안 변경하여 X.00을 얻습니다.
가장 간단한 방법은 교체를 사용하는 것입니다.
String var = "X,00";
String newVar = var.replace(",",".");
출력은 원하는 X.00 입니다. 또한 쉽게하기 위해 모든 것을 한꺼번에 수행하고 이중 변수에 저장할 수 있습니다.
Double var = Double.parseDouble(("X,00").replace(",",".");
이 답변이 지금은 유용하지 않다는 것을 알고 있지만이 포럼을 확인하는 누군가가 이와 같은 빠른 해결책을 찾고있을 것입니다.
String.format()
또는을 사용해보십시오java.text.Format
.