JAVA中對浮點數精度控制的幾種方法

2021-09-11 06:38:06 字數 1136 閱讀 7073

方法一:使用bigdecimal類中的setscale方法

bigdecimal a = new bigdecimal("3.1415926");

a = a.setscale(3, bigdecimal.round_half_up); // 返回乙個新的大浮點數物件,保留小數點後3位,且指定為四捨五入

system.out.println(a); // 輸出3.142

方法二:使用string.format方法

double a = 3.1415926;

string str = string.format("%.3f", a); // 返回的是乙個字串,保留小數點後3位,預設四捨五入

system.out.println(str); // 輸出3.142

方法三:使用numberformat類中的setmaximumfractiondigits方法

bigdecimal a = new bigdecimal("3.1415926");

numberformat nf = numberformat.getinstance();

nf.setmaximumfractiondigits(3); // 設定保留小數點後最多幾位

string str = nf.format(a.doublevalue()); // 對大浮點數進行格式化,返回字串

system.out.println(str); // 輸出3.142

方法四:使用decimalformat類中的setroundingmode和format方法

bigdecimal a = new bigdecimal("3.1415926");

decimalformat df = new decimalformat("#0.000"); // 指定數字模式,小數點後保留三位

df.setroundingmode(roundingmode.floor); // 指定省略模式,此處為向下省略

string str = df.format(a.doublevalue()); // 格式化,返回字串

system.out.println(str); // 輸出3.141

PHP 浮點數的精度

浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e 16。非基本數 算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞。此外,以十進位制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二...

浮點數精度的轉換

在 x86 x64 體系裡,由於 x87 fpu 硬體使用擴充套件雙精度格式,因此必然會遇到 single double precision 格式與double extended precision 格式之間的互換問題。轉換為擴充套件雙精度數 當由單精度數或雙精度轉換為擴充套件雙精度數時,expon...

浮點數的精度問題

float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 對於二進位制的小數 1.1 1 20 1 2 1 1 1 2 1.5 1.01 1 20 0 2 1 1 2 2 1 1 4 1.25 1.0011 1...