欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

String轉(zhuǎn)double失去精度問(wèn)題及解決

 更新時(shí)間:2023年07月11日 09:16:28   作者:老四就是我  
這篇文章主要介紹了關(guān)于String轉(zhuǎn)double失去精度問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

String轉(zhuǎn)double失去精度問(wèn)題

最近遇到一個(gè)坑,19.9的字符串轉(zhuǎn)double變成19.89,坑死我了。

現(xiàn)在把更改后的代碼貼出來(lái)

String s = "19.9";
BigDecimal temp = BigDecimal.valueOf(Double.valueOf(s));
// 將temp乘以100
temp = temp.multiply(BigDecimal.valueOf(100));
int sum = temp.intValue();
System.out.println(sum);

這樣親測(cè)不會(huì)失去精度。最后說(shuō)一句,細(xì)節(jié)很重要,特別是字符串轉(zhuǎn)其他類型的時(shí)候。

Java精度丟失之String轉(zhuǎn)Double轉(zhuǎn)int

項(xiàng)目遇到一種需求

服務(wù)器返回我“0.850”,我需要顯示八五折

看起來(lái)很簡(jiǎn)單,于是代碼出來(lái)了:

?Double d = Double.parseDouble("0.850");
?int result = (int) (d*100);

隨便找了兩個(gè)數(shù)試了試都沒(méi)問(wèn)題就以為大功告成了,誰(shuí)知道測(cè)試的同事告訴我0.570顯示的是56而不是57,我抱著懷疑的態(tài)度驗(yàn)證了一下,的確是我錯(cuò)了!

我心里一驚,是不是還有其他的特殊數(shù)字也會(huì)出現(xiàn)這種詭異的現(xiàn)象呢?

?public static void main(String[] args) {
? ? ? ? for(int i=0;i<10;i++){
? ? ? ? ? ? for (int j=0;j<10;j++){
? ? ? ? ? ? ? ? for(int k=0;k<10;k++){
? ? ? ? ? ? ? ? ? ? getUnNormalNumber(i,j,k);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private static ?void getUnNormalNumber(int i,int j,int k){
? ? ? ? String test = "0." + i + j + k;
? ? ? ? Double d = Double.parseDouble(test);
? ? ? ? int result = (int) (d*100);
? ? ? ? if(result/10==i&&result%10==j){
? ? ? ? }else {
? ? ? ? ? ? System.out.println(test);
? ? ? ? }
? ? }

經(jīng)過(guò)驗(yàn)證,果然有三個(gè)數(shù)是特殊的數(shù)字!

0.290
0.570
0.580

解決辦法

private static String getSuitableString(String test) {
? ? ? ? String array[] = test.split("\\.");
? ? ? ? if(array[1]==null) { return ""; }
? ? ? ? char[] chars = array[1].toCharArray();
? ? ? ? if (chars.length>=2){
? ? ? ? ? ? return chars[0]+""+chars[1];
? ? ? ? }else {
? ? ? ? ? ? return ?chars[0]+"";
? ? ? ? }
? ? }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論