Java中float型別精度問題

2021-09-22 09:28:53 字數 787 閱讀 4937

今天發現了乙個小的問題,在網上找了說的不多,在這記錄下來方便自己和比人解決自己的問題吧。

**片段

1unit 

=double.valueof(actionutils.getbillingtransformunit(request));//取出換算單位1000.0

2svt 

=((curvesegment.getendval()+1

))/unit;//加0.001

3我們的計算最小單位是釐,頁面上的startvaltemp是元,所以必須為三位小數,當curvesegment.getendval()取出的是一千萬內的整數時,加一計算最後在頁面上都能顯示增加了一厘。當為兩千萬時,string.valueof(svt)就變成了2位小數了,從而丟失了加上的1。

引用我在mantis上的原始介紹「程式中用的數字型別float 單位是釐 填20000 後轉為20000000 後加1等於20000001 除以1000.0後的值在本地化字串時為20000.0 出現精度丟失問題 (精度問題,float精度為7--8位,8位的情況是第一位是1 當是2時進製後面的精度丟失?)」

故問題就出在使用的型別精度不滿足,屬於選擇型別問題。使用double型別解決問題

1double

unit 

=double.valueof(actionutils.getbillingtransformunit(request));

2double

svt 

=((curvesegment.getendval()+1

))/unit;

3

Java中float型別精度問題

今天發現了乙個小的問題,在網上找了說的不多,在這記錄下來方便自己和比人解決自己的問題吧。片段 1unit double.valueof actionutils.getbillingtransformunit request 取出換算單位1000.0 2svt curvesegment.getendv...

C 中float和double型別的精度問題說明

float和double的範圍是由指數的位數來決定的。float的指數字有8位,而double的指數字有11位,分布如下 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 在數學中,特別是在計算機相關的...

關於float的精度型別

1 主要記錄一下為什麼float的精度型別為6 7位 首先,應該明確float資料型別,佔4個位元組,共4 8 32位,其中 ieee754標準規定如下 32位當中,1位為符號位 8位指數字 23位為數值位。故float型別的數值是由後邊的23位決定。23位指的是2進製數可以表示2 23取值範圍以內...