遇到問題:後台返回的0.0008客戶端顯示的是科學計數法。
解決:把後台返回的資料先轉成bigdecimal型別再保留指定小數(注意:返回的數必須大於0,不大於0時要先判斷,不然保留的小數字數多的話還會科學計數法顯示。當後台返回的是0,我這裡保留了9位小數,還是科學計數法顯示的。)
bigdecimal bigdecimal = new bigdecimal("0.0008");
//或bigdecimal settlementamountfinal = bigdecimal.valueof("0.0008");
//不知道後台返回有幾位小數,所以這裡保留9位
tv.settext(""+bigdecimal .setscale(9, bigdecimal.round_half_up));
如果後台返回的只有兩位小數,這裡顯示一長串的0也不美觀,所以這裡去掉多餘的0:
public static string subzeroanddot(string s)
return s;
}
完整用法:
tv.settext(subzeroanddot(string.valueof(bigdecimal.setscale(9, bigdecimal.round_half_up))));
bigdecimal的加減乘除:
class arithutil
//精確的加法演算法
public static double add(double d1,double d2)
//精確的減法演算法
public static double sub(double d1,double d2)
//精確的乘法演算法
public static double mul(double d1,double d2)
//相對精確的除法運算,當發生除不盡的情況時,精確到小數點以後10位
public static double div(double d1,double d2)
//相對精確的除法運算,當發生除不盡的情況時,精確到小數點以後指定精度(scale),再往後的數字四捨五入
public static double div(double d1,double d2,int scale)
bigdecimal b1=new bigdecimal(double.tostring(d1));
bigdecimal b2=new bigdecimal(double.tostring(d2));
return b1.divide(b2,scale,bigdecimal.round_half_up).doublevalue();
} }
解決double和float精度不准的問題
float和double型,的底層實現是二進位制的。十進位制中的乙個有限位數小數,轉換成二進位制就不一定是有限位數了,一旦位數超過的float和double型的位數寬度,就會出現 精度溢位 所以float和double型是為了科學計算而設計的,並不適合精確的十進位制計算.就像乙個十進位制的小數,要不...
解決double和float精度不准的問題
float和double型,的底層實現是二進位制的。十進位制中的乙個有限位數小數,轉換成二進位制就不一定是有限位數了,一旦位數超過的float和double型的位數寬度,就會出現 精度溢位 所以float和double型是為了科學計算而設計的,並不適合精確的十進位制計算.就像乙個十進位制的小數,要不...
float和double 精度分析
結論 1.範圍 float和double的範圍是由指數的位數來決定的。float的指數字有8位,而double的指數字有11位,分布如下 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 於是,floa...