久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當(dāng)前位置:首頁(yè)>職場(chǎng)>面試問(wèn)你用的什么數(shù)據(jù)庫(kù)(面試官問(wèn)我存儲(chǔ)金額應(yīng)該用哪種數(shù)據(jù)類(lèi)型)

面試問(wèn)你用的什么數(shù)據(jù)庫(kù)(面試官問(wèn)我存儲(chǔ)金額應(yīng)該用哪種數(shù)據(jù)類(lèi)型)

發(fā)布時(shí)間:2024-01-24閱讀(18)

導(dǎo)讀前言?最近在面試時(shí),碰到這樣一個(gè)問(wèn)題:在問(wèn)到項(xiàng)目部分時(shí),面試官問(wèn)我:你的項(xiàng)目中用到的分?jǐn)?shù)、金額之類(lèi)的數(shù)字是用的什么數(shù)據(jù)類(lèi)型?我沒(méi)有過(guò)多思考脫口而出:doub....

面試問(wèn)你用的什么數(shù)據(jù)庫(kù)(面試官問(wèn)我存儲(chǔ)金額應(yīng)該用哪種數(shù)據(jù)類(lèi)型)(1)

前言

? 最近在面試時(shí),碰到這樣一個(gè)問(wèn)題:在問(wèn)到項(xiàng)目部分時(shí),面試官問(wèn)我:你的項(xiàng)目中用到的分?jǐn)?shù)、金額之類(lèi)的數(shù)字是用的什么數(shù)據(jù)類(lèi)型? 我沒(méi)有過(guò)多思考脫口而出:double!隨后面試官又問(wèn):為啥不用float?

? 聽(tīng)到這個(gè)問(wèn)題,腦子里竟然突然有些懵,回答道:double用著順手所以就用了,面試過(guò)后我自己在聽(tīng)錄音復(fù)盤(pán)時(shí)(遠(yuǎn)程線(xiàn)上面試)聽(tīng)到自己的回答不由得扶額苦笑,后面又對(duì)這一塊的內(nèi)容進(jìn)行了回顧加深。

double和float的區(qū)別

float(單精度浮點(diǎn)數(shù))和double(雙精度浮點(diǎn)數(shù))的主要區(qū)別如下:

? 1)有效數(shù)字位數(shù)不同

? 單精度浮點(diǎn)數(shù)有效數(shù)字為8位

? 雙精度浮點(diǎn)數(shù)有效數(shù)字為16位

? 也就是說(shuō)因?yàn)橛行?shù)字位數(shù)不同,所以雙精度的double要比單精度的float要更精準(zhǔn)一些。

? 2)數(shù)值取值范圍不同

? 單精度浮點(diǎn)數(shù)的表示范圍:-3.40E 38~3.40E 38

? 雙精度浮點(diǎn)數(shù)的表示范圍:-1.79E 308~1.79E 308

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

? 3)內(nèi)存中占有的字節(jié)數(shù)不同

? 單精度浮點(diǎn)數(shù)在內(nèi)存中占4個(gè)字節(jié)

? 雙精度浮點(diǎn)數(shù)在內(nèi)存中占8個(gè)字節(jié)

? 也就是說(shuō)雙精度的double要比單精度的float更占內(nèi)存

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

? 一般來(lái)說(shuō),CPU處理單精度浮點(diǎn)數(shù)的速度比處理雙精度浮點(diǎn)數(shù)快

在程序中默認(rèn)小數(shù)為double類(lèi)型,所以如果要用float的話(huà),必須進(jìn)行強(qiáng)轉(zhuǎn)

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

比如我寫(xiě)了上面的代碼的話(huà),在程序中就會(huì)編譯報(bào)錯(cuò),正確的寫(xiě)法應(yīng)該為如下的代碼:

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

手動(dòng)強(qiáng)轉(zhuǎn)或者在小數(shù)后面加f表示為float類(lèi)型(f不區(qū)分大小寫(xiě))

在使用float時(shí)需要注意一點(diǎn):float 是8位有效數(shù)字,比如說(shuō)有如下代碼:

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

最終的輸出結(jié)果為:1.1111112

這里有一個(gè)疑問(wèn),無(wú)論第九位是否大于5,在取值的時(shí)候都會(huì)向第八位進(jìn)1。

以上就是double和float的區(qū)別

金額到底應(yīng)該用哪種數(shù)據(jù)類(lèi)型?

? 在總結(jié)double和float的區(qū)別時(shí),我發(fā)現(xiàn)在真實(shí)開(kāi)發(fā)中針對(duì)金額的存儲(chǔ)并非如我之前思考的一樣使用double或者float,為啥?讓我們看下面一段代碼:

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

? 對(duì)于這段代碼的執(zhí)行結(jié)果,大部分人可能會(huì)想肯定是0.01啊!但是運(yùn)行之后會(huì)驚奇的發(fā)現(xiàn)結(jié)果居然是0.009999999999999998,因?yàn)閒loat與double都是浮點(diǎn)數(shù),浮點(diǎn)數(shù)參與的運(yùn)算通常伴隨著因?yàn)闊o(wú)法精確表示而進(jìn)行的近似與舍入,所以導(dǎo)致結(jié)果會(huì)有一些偏差,而涉及到金額的計(jì)算是絕對(duì)不允許存在偏差的。

? 那么應(yīng)該怎么表示金額呢?

? 有兩種解決方案:第一種是存儲(chǔ)金額時(shí)以分或厘為單位存儲(chǔ)一個(gè)整數(shù),第二種是使用BigDecimal這種數(shù)據(jù)類(lèi)型來(lái)表示金額。

? 對(duì)于第一種是我目前在寫(xiě)項(xiàng)目時(shí)采用的,第二種暫時(shí)并未做嘗試。

總結(jié)

面試官問(wèn)的小小的一個(gè)問(wèn)題竟然藏有這么多玄機(jī)和學(xué)問(wèn),不由得讓我汗顏,歸根結(jié)底還是自己的知識(shí)面不夠廣。不過(guò)這也算是面試中的一些小小收獲吧,能發(fā)現(xiàn)自己的不足并及時(shí)補(bǔ)足。

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

歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-220657.html

相關(guān)文章

    Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖