답변:
다음 printf
과 같이 방법을 사용할 수 있습니다 .
System.out.printf("%.2f", val);
간단히 말해서 %.2f
구문은 Java에게 형식 지정자 ( ) 의 시작 부분에서 부동 소수점 숫자 ( )를 십진수로 표현 하여 변수 ( val
)를 소수점 2 자리 ( ) 로 반환하도록 지시 합니다 ..2
f
%
이외에도 사용할 수있는 다른 변환 문자가 있습니다 f
.
d
: 십진 정수o
: 8 진 정수e
: 과학적 표기법의 부동 소수점Locale.FRANCE
?
Locale.US
너무 멀다고 생각합니다 . 대 / 소문자 구분, 숫자 렌더링 등을 위해 "중립"로캘을 하드 코딩해야하는 경우을 지정하십시오 Locale.ROOT
. 이는 사용자에게 렌더링되지 않고 다른 프로그램에서 사용되는 텍스트에 적합합니다. 사용자에게 표시되는 텍스트의 경우 명시 적으로 지정했는지 또는 기본 설정인지에 관계없이 해당 로케일을 존중하십시오.
사용할 수 있습니다 DecimalFormat
. 그것을 사용하는 한 가지 방법 :
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
다른 하나는 #.##
형식을 사용하여 구성하는 것 입니다.
모든 형식 지정 옵션을 형식 지정 메서드를 호출하는 것보다 읽기 쉽지 않지만 선호하는 문제입니다.
System.out.printf("%.2f", value)
구문? 아직도 주변에 있습니까?
DecimalFormat
답변을 계속 보았을 때 즉시 내가 틀렸다고 생각했지만 분명히 설명해 주셔서 감사합니다.
df.setMinimumFractionDigits(2);
두 자리를 강제로
코드에서 와 같이 값이 필요한 경우 String.format ()을 사용하는 것이 좋습니다 String
.
예를 들어 String.format()
다음과 같은 방식으로 사용할 수 있습니다 .
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
많은 사람들이 언급했습니다 DecimalFormat
. 그러나 printf
최신 버전의 Java가있는 경우 에도 사용할 수 있습니다 .
System.out.printf("%1.2f", 3.14159D);
간단한 트릭은 예를 들어 변수를 곱하고 100
반올림 한 다음 100.0
다시 나눔으로써 더 짧은 버전의 변수를 생성하는 것입니다 . 이 방법으로 소수점 이하 두 자리 로 변수를 생성합니다 .
double new_variable = Math.round(old_variable*100) / 100.0;
이 "저렴한 속임수"는 항상 저에게 충분했으며 어떤 언어로든 작동합니다 (저는 Java를 배우지 않고 배우는 것입니다).
마지막에 변경된 빠른 코드를 아래에서 사용할 수 있습니다. 포인트 뒤의 숫자를 0으로 추가하십시오.
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
변수 y1은 전에 0.123456789 와 같았습니다 . 코드 후에는 0.12 로만 바뀝니다 .
DecimalFormat을 보십시오
다음은 튜토리얼의 예입니다.
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
"###. ##"과 같은 패턴을 선택하면 소수점 이하 두 자리가 나오고 값이 반올림된다고 생각합니다. 원하는 정확한 형식을 얻기 위해 링크를보고 싶을 것입니다 (예 : 후행 0을 원하는지 여부)
확인-str을 띄웁니다.
package test;
import java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
산출:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
데모를위한 작은 간단한 프로그램 :
import java.io.*;
import java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
한 시간 이상 동안 문제가 발생한 한 가지 문제 DecimalFormat
-이중 및 부동 입력을 다르게 처리합니다. RoundingMode의 변경조차도 도움이되지 않았습니다. 나는 전문가는 아니지만 그것이 나와 같은 누군가를 도울 수 있다고 생각했습니다. Math.round
대신에 사용 했습니다. 아래를보십시오 :
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
산출:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
이 시도:-
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}
String.format(java.util.Locale.US,"%.2f", val);