Programing

Java에서 소수점 이하 두 자리의 부동 소수점 데이터 출력을 표시하는 방법은 무엇입니까?

crosscheck 2020. 5. 29. 07:57
반응형

Java에서 소수점 이하 두 자리의 부동 소수점 데이터 출력을 표시하는 방법은 무엇입니까?


내가 할 수 있습니까 System.out.print?


다음 printf과 같이 방법을 사용할 수 있습니다 .

System.out.printf("%.2f", val);

간단히 말해 %.2f구문은 Java에게 형식 지정자 ( ) 의 시작 부분에서 부동 소수점 숫자 ( )를 십진수로 표현하여 소수점 이하 val두 자리 ( )로 변수 ( ) 를 반환하도록 지시 합니다 ..2f%

이외에도 사용할 수있는 다른 변환 문자가 있습니다 f.

  • d: 십진 정수
  • o: 8 진 정수
  • e: 과학적 표기법의 부동 소수점

사용할 수 있습니다 DecimalFormat. 그것을 사용하는 한 가지 방법 :

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

다른 하나는 #.##형식을 사용하여 구성하는 것 입니다.

모든 형식 지정 옵션을 형식 지정 메서드를 호출하는 것보다 읽기 쉽지 않지만 선호하는 문제입니다.


코드에서 와 같이 값이 필요한 경우 String.format ()을 사용하는 것이 좋습니다 String.

예를 들어 String.format()다음과 같은 방식으로 사용할 수 있습니다 .

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24

많은 사람들이 언급했습니다 DecimalFormat. 그러나 printf최신 버전의 Java가있는 경우 에도 사용할 수 있습니다 .

System.out.printf("%1.2f", 3.14159D);

printf 형식 문자열에 대한 자세한 내용은 Formatter의 문서를 참조하십시오 .


간단한 트릭은 예를 들어 변수를 곱하고 100반올림 한 100.0후 다시 나눔으로써 더 짧은 버전의 변수를 생성하는 것입니다 . 이 방법으로 소수점 이하 두 자리 로 변수를 생성합니다 .

double new_variable = Math.round(old_variable*100) / 100.0;

이 "저렴한 속임수"는 항상 저에게 충분했으며 모든 언어로 작동합니다 (저는 Java를 배우지 않고 배우는 것입니다).


DecimalFormat을 보십시오

다음은 튜토리얼의 예입니다.

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

"###. ##"과 같은 패턴을 선택하면 소수점 이하 두 자리가 나오고 값이 반올림된다고 생각합니다. 원하는 정확한 형식을 얻기 위해 링크를보고 싶을 것입니다 (예 : 후행 0을 원하는지 여부)


float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

출력은 22.35입니다. 소수점 3 자리가 필요한 경우 "% .3f"로 변경하십시오.


다음은 Java에서 소수점 이하 2 자리로 부동 소수점 데이터의 출력을 표시하는 방법입니다.

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98

확인-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);
    }
}

그냥 할 String str = System.out.printf("%.2f", val).replace(",", ".");독립적으로 사용자의 로케일의 사항을 확인하려는 경우, 당신은 항상 / 디스플레이 a를 얻을 것이다 "." 소수점 구분 기호로. 나중에 같은 종류의 변환을 수행하는 경우 프로그램 충돌을 일으키지 않으려는 경우 필수입니다.float f = Float.parseFloat(str);


One issue that had me for an hour or more, on DecimalFormat- It handles double and float inputs differently. Even change of RoundingMode did not help. I am no expert but thought it may help someone like me. Ended up using Math.round instead. See below:

    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)));

Output:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77

Try this:-

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);
      }


 }

You may use this quick codes below that changed itself at the end. Add how many zeros as refers to after the point

float y1 = 0,123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

The variable y1 was equals to 0,123456789 before. After the code it turns into 0,12 only.

참고URL : https://stackoverflow.com/questions/2538787/how-to-display-an-output-of-float-data-with-2-decimal-places-in-java

반응형