답변:
다음 printf과 같이 방법을 사용할 수 있습니다 .
System.out.printf("%.2f", val);
간단히 말해서 %.2f구문은 Java에게 형식 지정자 ( ) 의 시작 부분에서 부동 소수점 숫자 ( )를 십진수로 표현 하여 변수 ( val)를 소수점 2 자리 ( ) 로 반환하도록 지시 합니다 ..2f%
이외에도 사용할 수있는 다른 변환 문자가 있습니다 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);