Java NumberFormat格式化float類型的bug
首先,這個(gè)NumberFormat這個(gè)類,可以格式化各種數(shù)字。你只要稍微設(shè)置一下,結(jié)果還是很理性的。
但是,他有那么一丟丟的bug,不知道你知道不?
/**
* 2.3F經(jīng)過(guò)格式化,竟然變成2.99啦。what the fuck .
* float類型的時(shí)候,值是2.3,但是一經(jīng)變成Double,值就變成2.99999啦。
* 這個(gè)format的參數(shù)是double類型的。所以,在傳入?yún)?shù)的時(shí)候,就變成了對(duì)2.299999952316284進(jìn)行操作。返回就過(guò)就是2.99
*/
private static void floatFormatTest() {
float responseTime = 2.3F;
NumberFormat formatter;
formatter = NumberFormat.getNumberInstance();
formatter.setGroupingUsed(false);
formatter.setRoundingMode(RoundingMode.FLOOR);
formatter.setMaximumFractionDigits(2);
String format = formatter.format(responseTime);
System.out.println(format);
float v = Float.parseFloat(formatter.format(responseTime));
System.out.println(v);
}
看下debug的時(shí)候,這個(gè)數(shù)字到底有啥出乎意料的變化。

這個(gè)時(shí)候,還是OK的。還是正常的。

看到啦沒(méi),這個(gè)2.3F,float類型的數(shù),經(jīng)過(guò)format的時(shí)候,自動(dòng)變成double類型啦。然后,就不穩(wěn)定啦。
經(jīng)過(guò)取舍之后,2.3,就變成啦2.29啦
怎么規(guī)避這個(gè)問(wèn)題

在使用這個(gè)BigDecimal的時(shí)候,傳參數(shù),要傳字符串。不然還是不準(zhǔn)確。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
java實(shí)現(xiàn)基于UDP協(xié)議的聊天小程序操作
UDP是與TCP相對(duì)應(yīng)的協(xié)議,UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。正因?yàn)閁DP協(xié)議沒(méi)有連接的過(guò)程,所以它的通信效率高;但也正因?yàn)槿绱?,它的可靠性不如TCP協(xié)議高,本文給大家介紹java實(shí)現(xiàn)基于UDP協(xié)議的聊天小程序操作,感興趣的朋友一起看看吧2021-10-10
SpringBoot簡(jiǎn)單實(shí)現(xiàn)文件上傳
這篇文章主要介紹了SpringBoot簡(jiǎn)單實(shí)現(xiàn)文件上傳,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09
Spring實(shí)戰(zhàn)之讓Bean獲取Spring容器操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實(shí)例形式分析了Bean獲取Spring容器的相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11
快速搭建一個(gè)SpringBoot項(xiàng)目(純小白搭建教程)
本文主要介紹了快速搭建一個(gè)SpringBoot項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Java實(shí)踐練習(xí)輕松幾行實(shí)現(xiàn)追書神器
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)追書神器,用技術(shù)改變生活,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-10-10
Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲
這篇文章主要為大家詳細(xì)介紹了Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

