簡體   English   中英

如何在 Java 中打印 2 個小數位的浮點數?

[英]How to print a float with 2 decimal places in Java?

我可以用System.out.print來做嗎?

您可以使用printf方法,如下所示:

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

簡而言之, %.2f語法告訴 Java 從格式說明符 ( % ) 的開頭以浮點數 ( f ) 的十進制表示形式返回帶有 2 個小數位 ( .2 ) 的變量 ( val )。

除了f之外,您還可以使用其他轉換字符:

  • d : 十進制整數
  • o : 八進制整數
  • e : 科學記數法中的浮點數

您可以使用DecimalFormat 一種使用方法:

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

另一種是使用#.##格式構建它。

我發現所有格式化選項都比調用格式化方法可讀性差,但這是一個偏好問題。

如果您需要將值作為代碼中的String ,我建議使用String.format()

例如,您可以通過以下方式使用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

您可以使用下面的快速代碼,該代碼在最后自行更改。 在點后添加多少個零作為參考

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

變量 y1 之前等於0.123456789 在代碼之后它只變成0.12

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

輸出為 22.35。 如果您需要 3 個小數點,請將其更改為“%.3f”。

一個簡單的技巧是通過將變量乘以例如100 、四舍五入並再次除以100.0來生成變量的較短版本。 這樣您就可以生成一個變量,帶有2 個小數位

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

這個“便宜的技巧”對我來說總是足夠好,並且適用於任何語言(我不是 Java 人,只是在學習它)。

很多人都提到過DecimalFormat 但是,如果您有最新版本的 Java,也可以使用printf

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

有關 printf 格式字符串的更多信息,請參閱格式化程序上的文檔

十進制格式

這是教程中的一個示例:

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

如果你選擇像“###.##”這樣的模式,你會得到兩個小數位,我認為這些值是四舍五入的。 您將需要查看鏈接以獲得所需的確切格式(例如,是否需要尾隨零)

下面是如何在 Java 中顯示帶有 2 個小數位的浮點數據輸出的代碼:

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

在 Java 中打印最多 2 個小數位的浮點數:

    float f = (float)11/3;
    System.out.print(String.format("%.2f",f));

輸出:3.67

> 使用%.3f最多保留三個小數位。

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

DecimalFormat上有一個讓我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

用於演示的小簡單程序:

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(",", "."); 如果您想確保獨立於用戶的 Locale,您將始終獲得/顯示一個“.”。 作為小數點分隔符。 如果你不想讓你的程序崩潰,如果你以后做一些像float f = Float.parseFloat(str);這樣的轉換,這是必須的float f = Float.parseFloat(str);

public String getDecimalNumber(String number) {
        Double d=Double.parseDouble(number);
        return String.format("%.5f", d);
}

還要注意NumberFormatException

嘗試這個:-

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


 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM