在 Java 中截斷 Double

Rupam Yadav 2023年1月30日 2021年4月29日
  1. 在 Java 中使用 DecimalFormat 來截斷雙精度數
  2. 在 Java 中使用 BigDecimal 來截斷雙精度數
  3. 在 Java 中使用 Apache 通用庫來截斷小數
  4. 在 Java 中使用 java.lang.Math 來截斷小數
在 Java 中截斷 Double

在本文中,我們將研究如何在 Java 中將數字截斷或舍入為 n 個小數點。Java 提供了兩種基本型別來儲存十進位制值,即 double 和 float。建議使用 BigDecimal 類獲取精確值或四捨五入。

在 Java 中使用 DecimalFormat 來截斷雙精度數

DecimalFormatNumberFormat 的子類,可以使用提供的格式化模式對十進位制數字進行格式化。在下面的程式碼中,我們建立了一個 DecimalFormat 物件,該物件傳遞了合適的格式設定模式。我們可以在 decimatFormat 物件上呼叫 format()方法,並將我們的雙變數 d 作為引數傳遞。

format() 方法返回一個被截斷的字串,如輸出所示。

import java.text.DecimalFormat;
public class DecimalFormatting {
    public static void main(String args[]){
        double d = 9.4568982982989;
        String pattern = "#.###";
        DecimalFormat decimalFormat =  new DecimalFormat(pattern);
        String formattedDouble = decimalFormat.format(d);
        System.out.println("Formatted double d = "+formattedDouble);
    }
}

輸出:

Formatted double d = 9.457

在 Java 中使用 BigDecimal 來截斷雙精度數

在 Java 中,BigDecimal 是不可變的,任意精度的帶符號十進位制數字。它提供對比例和精度的控制。我們建立了一個 BigDecimal 物件,該物件將 double 轉換為字串,從而避免了代表近似值的問題。

然後,我們在此 BigDecimal 物件 bd 上呼叫 setScale(int newScale, RoundingMode roundingMode) 方法,該方法有兩個引數:要返回的 BigDecimal 的比例,另一個是要應用的舍入模式。RoundingMode.FLOOR 模式向負無窮大舍入。

public class DecimalFormatting {
    public static void main(String args[]){
        double d = 9.4568982982989;
        BigDecimal bd = new BigDecimal(String.valueOf(d));
        BigDecimal rounded = bd.setScale(2,RoundingMode.FLOOR);
        System.out.println("BigDecimal rounded off : "+rounded);
    }
}

輸出:

BigDecimal rounded off : 9.45

在 Java 中使用 Apache 通用庫來截斷小數

我們可以通過該庫實現相同的目標,該庫的 maven 依賴關係在下面給出。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.5</version>
</dependency>

我們可以使用該庫中的 Precision.round() 方法來格式化小數。此方法有兩個引數,一個是要格式化的小數變數,另一個是小數位。小數點後需要 4 位數字;因此,這就是我們需要的規模。輸出顯示十進位制數字被截斷。

import org.apache.commons.math3.util.Precision;
public class DecimalFormatting {
    public static void main(String args[]){
        double d = 9.4568982982989;
        double doubleP = Precision.round(d,4);
        System.out.println("Precision rounded off : "+doubleP);
    }
}

輸出:

Precision rounded off : 9.4569

在 Java 中使用 java.lang.Math 來截斷小數

這是在 Java 中舍入十進位制數字的另一種方法。Math.pow() 通過乘以 10n來控制 n 個小數位數。我們使用此方法建立一個雙變數 scale,該變數帶有兩個引數,以 10 為底和以 3 為底。

Java 中的 Math.round() 用於將數字四捨五入到最接近的整數。這是通過將數字加 1/2,說出結果的底限並將結果轉換為整數資料型別來完成的。不建議使用此方法,因為它有時會錯誤地截斷該值。

public class DecimalFormatting {
    public static void main(String args[]){
         double d = 9.4568982982989;
         double scale = Math.pow(10, 3);
         double doubleM1 = Math.round(d*scale)/scale;
         System.out.println("Math1 Rounded off: "+doubleM1);
    }
}

輸出:

Math Rounded off: 9.45
Math1 Rounded off: 9.457
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Double