當前位置:首頁 » 編程語言 » float精度java

float精度java

發布時間: 2022-11-18 15:25:28

『壹』 java float double精度為什麼會丟失

floata=3.14;這個語句的意思是把雙精度浮點類型(double)賦值給單精度浮點類型(float)的變數a,把一個高精度的數賦值給一個低精度的數,就會照成精度丟失了。因為Java中,3.14這樣的寫法默認是認為double類型的,而3.14f這樣的寫法就會指定3.14這個數為float類型,這樣賦值就不會有精度丟失了。注意,這里你不要單純的把float想像成只能存一位小數點的數,3.14這個數同樣用float可以存下

『貳』 java float的精度 小菜鳥別噴啊

應該寫成 float f = 3.4f
小數不在後面加f,默認是double類型

『叄』 Java中 int和float哪個精度高

int是整型,float是小數類型的,如果談精度的話肯定是float啦,因為如果一個小數類型的到int中也把小數點後的自動去掉了

『肆』 java中float類型造成的精度誤差如何解決

float 類型 精度只有7位有效數字 double 類型 精度12-14位有效數字 s=k/j; 會引進有效數字的截斷誤差。 double 型,輸出格式用 %lf (Long Float -- lf)

『伍』 java float double精度為什麼會丟失

這個是二進制存儲小數的問題,很多編程語言都存在這個問題。
二進制只能精確表示2的-n次方的整數倍小數
要精確地進行計算,請使用BigDecimal,並在計算時約束好小數位(比如精確到2位小數)。

『陸』 java float 精度問題

你取這條數據的時候以字元串的形式拿出來就可以了,用比如說用jdbc,rs.getString()

『柒』 java中如何實現將float精確到小數點後兩位

方法1:用Math.round計算,這里返回的數字格式的.

float price=89.89;
int itemNum=3;
float totalPrice=price*itemNum;
float num=(float)(Math.round(totalPrice*100)/100);//如果要求精確4位就*10000然後/10000

方法2:用DecimalFormat 返回的是String格式的.該類對十進制進行全面的封裝.像%號,千分位,小數精度.科學計算.

float price=1.2;
DecimalFormat decimalFormat=new DecimalFormat(".00");//構造方法的字元格式這里如果小數不足2位,會以0補足.
String p=decimalFomat.format(price);//format 返回的是字元串

『捌』 java float double精度為什麼會丟失

由於對float或double的使用不當,可能會出現精度丟失的問題。問題大概情況可以通過如下代碼理解:


publicclassFloatDoubleTest{
publicstaticvoidmain(String[]args){
floatf=20014999;
doubled=f;
doubled2=20014999;
System.out.println("f="+f);
System.out.println("d="+d);
System.out.println("d2="+d2);
}
}


得到的結果如下:

f=2.0015E7
d=2.0015E7
d2=2.0014999E7

從輸出結果可以看出double可以正確的表示20014999,而float沒有辦法表示20014999,得到的只是一個近似值。這樣的結果很讓人訝異。20014999這么小的數字在float下沒辦法表示。於是帶著這個問題,做了一次關於float和double學習,做個簡單分享,希望有助於大家對java浮點數的理解。

關於java的float和double

Java語言支持兩種基本的浮點類型:float和double。java的浮點類型都依據IEEE754標准。IEEE754定義了32位和64位雙精度兩種浮點二進制小數標准。

IEEE754用科學記數法以底數為2的小數來表示浮點數。32位浮點數用1位表示數字的符號,用8位來表示指數,用23位來表示尾數,即小數部分。作為有符號整數的指數可以有正負之分。小數部分用二進制(底數2)小數來表示。對於64位雙精度浮點數,用1位表示數字的符號,用11位表示指數,52位表示尾數。如下兩個圖來表示:


float(32位):

綠色部分是符號位,紅色部分是冪指數,藍色部分是尾數。

對比可以得出:符號位都是0,冪指數為移碼表示,兩者剛好也相等。唯一不同的是尾數。

在double的尾數為:,省略後面的零,至少需要24位才能正確表示。

而在float下面尾數為:00110001011001111001100,共23位。

為什麼會這樣?原因很明顯,因為float尾數最多隻能表示23位,所以24位的001100010110011110010111在float下面經過四捨五入變成了23位的00110001011001111001100。所以20014999在float下面變成了20015000。

也就是說20014999雖然是在float的表示範圍之內,但在IEEE754的float表示法精度長度沒有辦法表示出20014999,而只能通過四捨五入得到一個近似值。

總結:

浮點運算很少是精確的,只要是超過精度能表示的范圍就會產生誤差。往往產生誤差不是因為數的大小,而是因為數的精度。因此,產生的結果接近但不等於想要的結果。尤其在使用float和double作精確運算的時候要特別小心。

可以考慮採用一些替代方案來實現。如通過String結合BigDecimal或者通過使用long類型來轉換。

『玖』 JAVA中的float單精度,double雙精度是什麼意思呀不懂~~,還有什麼怎麼用這兩個最好舉下例子,謝謝

最簡單例子:
float A = 1;
float B = 2;
double C = A * B;
這時如果用float C = A * B 就會報無法將double隱式轉換成double類型
說明double的精度要高於float
所謂單精度雙精度是根據類型對象所佔用內存空間的位元組數決定的,雙精度所佔內存空間為16位,而float只有8位

『拾』 java中float和double的區別

單精度和雙精度。
float是單精度類型,精度是8位有效數字,取值范圍是10的-38次方到10的38次方,float佔用4個位元組的存儲空間
double是雙精度類型,精度是17位有效數字,取值范圍是10的-308次方到10的308次方,double佔用8個位元組的存儲空間
當你不聲明的時候,默認小數都用double來表示,所以如果要用float的話,則應該在其後加上f
例如:float a=1.3;
則會提示不能將double轉化成float 這成為窄型轉化
如果要用float來修飾的話,則應該使用float a=1.3f
注意float是8位有效數字,第7位數字將會產生四捨五入
所以如果一個float變數 這樣定義: float a=1.32344435; 則第7位將產生四捨五入(5及5以下的都將捨去)

熱點內容
php難招 發布:2025-01-14 19:06:07 瀏覽:487
sublime編譯php 發布:2025-01-14 18:57:16 瀏覽:307
雲計算伺服器是什麼 發布:2025-01-14 18:56:22 瀏覽:41
vip域名查詢ftp 發布:2025-01-14 18:46:48 瀏覽:114
格式化linux 發布:2025-01-14 18:35:14 瀏覽:593
如何進入安卓原生市場 發布:2025-01-14 18:22:06 瀏覽:558
台式電腦找不到伺服器 發布:2025-01-14 18:19:58 瀏覽:423
androidsdk網盤 發布:2025-01-14 18:17:43 瀏覽:80
個別用戶訪問不了騰訊雲伺服器 發布:2025-01-14 18:03:27 瀏覽:276
oracle鏈接sqlserver 發布:2025-01-14 17:58:33 瀏覽:729