在 Java 中截斷 Double
-
在 Java 中使用
DecimalFormat
來截斷雙精度數 -
在 Java 中使用
BigDecimal
來截斷雙精度數 - 在 Java 中使用 Apache 通用庫來截斷小數
-
在 Java 中使用
java.lang.Math
來截斷小數
在本文中,我們將研究如何在 Java 中將數字截斷或舍入為 n 個小數點。Java 提供了兩種基本型別來儲存十進位制值,即 double 和 float。建議使用 BigDecimal
類獲取精確值或四捨五入。
在 Java 中使用 DecimalFormat
來截斷雙精度數
DecimalFormat
是 NumberFormat
的子類,可以使用提供的格式化模式對十進位制數字進行格式化。在下面的程式碼中,我們建立了一個 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
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