日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16 bit float 存储_面试官问我存储金额应该用哪种数据类型,我竟这样回答

發布時間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16 bit float 存储_面试官问我存储金额应该用哪种数据类型,我竟这样回答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

? 最近在面試時,碰到這樣一個問題:在問到項目部分時,面試官問我:你的項目中用到的分數、金額之類的數字是用的什么數據類型? 我沒有過多思考脫口而出:double!隨后面試官又問:為啥不用float?

? 聽到這個問題,腦子里竟然突然有些懵,回答道:double用著順手所以就用了,面試過后我自己在聽錄音復盤時(遠程線上面試)聽到自己的回答不由得扶額苦笑,后面又對這一塊的內容進行了回顧加深。

double和float的區別

float(單精度浮點數)和double(雙精度浮點數)的主要區別如下:

? 1)有效數字位數不同

? 單精度浮點數有效數字為8位

? 雙精度浮點數有效數字為16位

? 也就是說因為有效數字位數不同,所以雙精度的double要比單精度的float要更精準一些。

? 2)數值取值范圍不同

? 單精度浮點數的表示范圍:-3.40E+38~3.40E+38

? 雙精度浮點數的表示范圍:-1.79E+308~1.79E+308

? 3.40E+38的意思是3.4*10的38次方,而1.79E+308指的是1.79*10的308次方,所以double的取值范圍要遠遠大于float

? 3)內存中占有的字節數不同

? 單精度浮點數在內存中占4個字節

? 雙精度浮點數在內存中占8個字節

? 也就是說雙精度的double要比單精度的float更占內存

? 4)在程序中的處理速度不同

? 一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快

在程序中默認小數為double類型,所以如果要用float的話,必須進行強轉

public static void main(String[] args){float a = 1.1;}

比如我寫了上面的代碼的話,在程序中就會編譯報錯,正確的寫法應該為如下的代碼:

public static void main(String[] args){ float a = (float)1.1; float b = 1.1f;}

手動強轉或者在小數后面加f表示為float類型(f不區分大小寫)

在使用float時需要注意一點:float 是8位有效數字,比如說有如下代碼:

public static void main(String[] args){ float a = 1.11111111111f; System.out.println(a);}

最終的輸出結果為:1.1111112

這里有一個疑問,無論第九位是否大于5,在取值的時候都會向第八位進1。

以上就是double和float的區別

金額到底應該用哪種數據類型?

? 在總結double和float的區別時,我發現在真實開發中針對金額的存儲并非如我之前思考的一樣使用double或者float,為啥?讓我們看下面一段代碼:

public static void main(String[] args) { double a=0.03; double b=0.02; double c=a-b; System.out.println(c);}

? 對于這段代碼的執行結果,大部分人可能會想肯定是0.01啊!但是運行之后會驚奇的發現結果居然是0.009999999999999998,因為float與double都是浮點數,浮點數參與的運算通常伴隨著因為無法精確表示而進行的近似與舍入,所以導致結果會有一些偏差,而涉及到金額的計算是絕對不允許存在偏差的。

? 那么應該怎么表示金額呢?

? 有兩種解決方案:第一種是存儲金額時以分或厘為單位存儲一個整數,第二種是使用BigDecimal這種數據類型來表示金額。

? 對于第一種是我目前在寫項目時采用的,第二種暫時并未做嘗試。

總結

面試官問的小小的一個問題竟然藏有這么多玄機和學問,不由得讓我汗顏,歸根結底還是自己的知識面不夠廣。不過這也算是面試中的一些小小收獲吧,能發現自己的不足并及時補足。


作者:喧嘩
鏈接:https://juejin.im/post/5eb115456fb9a043383d6bb5

總結

以上是生活随笔為你收集整理的16 bit float 存储_面试官问我存储金额应该用哪种数据类型,我竟这样回答的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。