java double型別加減運算時出現的精度丟失問題
問題由來:
今天在寫一個業務引數的時候,需要幾個數一起算一下最後返回一個浮點數。
一開始我就直接用強制型別轉化之後開始加加減減,後來發現總是會在末尾多出一些莫名的小數,這很明顯就是精度丟失問題,但是因為是要返回固定的資料型別,不能用Format轉成String來固定格式。
解決方案
最正確的做法應該是使用BigDecimal 來轉一下型別,這樣才是Effective Java 中的推薦方法,但是我有點偷懶,就直接把公式變形了一下,先做加減法(幾個int資料)再做除法,這樣也不再有精度丟失。
相關推薦
java double型別加減運算時出現的精度丟失問題
問題由來: 今天在寫一個業務引數的時候,需要幾個數一起算一下最後返回一個浮點數。 一開始我就直接用強制型別轉化之後開始加加減減,後來發現總是會在末尾多出一些莫名的小數,這很明顯就是精度丟失問題,但是因為是要返回固定的資料型別,不能用Format轉成Strin
java double型別-加減乘除高精度運算
double型別-加減乘除高精度運算 // 進行加法運算 private double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1));
js double型別加減乘除
/** * 加法運算,避免資料相加小數點後產生多位數和計算精度損失。 * * @param num1加數1 | num2加數2 */ function numAdd(num1, num2) { var baseNum, baseNum1, baseNum2; try { ba
SQL語言做加減運算時將某項的null值轉換為0
在SQL語言中,很多時候,在表項中會遇到null值,null值有三大特點:1)NULL值不參加統計;2)NULL值不進入計算表示式;3)不能與其它值進行比較。 因此,在運算中要將null值有時候轉換成其他值,這裡提供一種加減運算中轉換為0的方法。
java float double型別做小數點加減運算不準確
一提到Java裡面的商業計算,我們都知道不能用float和double,因為他們無法 進行精確計算。但是Java的設計者給程式設計人員提供了一個很有用的類BigDecimal,他可以完善float和double類無法進行精確計算的缺 憾。BigDecimal類位於java.maths類包下。首先我們來看下
Java對日期Date類進行加減運算,年月日,時分秒
第一種,知道日期,如2018051109144 String str=txnTime; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");/
java處理浮點型別的加減乘除法出現小數點精度錯亂的解決方法
如果你在java裡面執行一下一段程式碼,你會發現會出現錯亂的小數點: double d1 = 100.0234; double d2 = 12.0652;
Java 日期加減運算
field 實現 int calendar類 ava == str 方法表 今天 1.用java.util.Calender來實現 Calendar calendar=Calendar.getInstance(); calendar.setTime(new
java在處理基本資料型別加減乘除操作注意
1.int /int 得到的結果轉double 舉例: int a=1; int b=2; double d=a/b 上面結果通常認為是0.5 ,但結果是0.0;正確的是: int a=1; int b=2; double d=(double)a/b 2. do
JAVA中如何實現日期的加減運算
JAVA中實現日期的加減運算方法 一、用java.util.Calender來實現 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); System.out.printl
Java 處理日期年、月、日、周加減運算
1.java 日期加減運算 GregorianCalendar gc = new GregorianCalendar(); //java中對日期的加減操作 gc.add(1,-1);//表示年份減一. gc.add(2,-1);//表示月份減一. gc.add(3,-1);//表示周減一
當沒有浮點數加法運算時,使用整數完成double型別的加法運算
加法部分程式碼: #include "stdio.h" #include "project06.support.h" struct node { unsigned long long int sign; unsigned long long int e
Java Double型別精確運算解決
Java中的簡單浮點數型別float和double不能夠進行運算。 首先我們想到的是四捨五入,Math類中的round方法不能設定保留幾位小數,我們只能像這樣(例如保留兩位) Math.round(value * 100) / 100.0; 非常不幸,上面的程式碼不能解
java對日期Date類進行加減運算、年份加減,月份加減
日期比較:簡單的比較可以以字串的形式直接比較,也可使用java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18")) 方式來比較日期的大小.也可使用java.util.Date.after(java.util
js中float型別加減乘除運算精度問題
js裡邊取float數的精度的方法 toFixed() toFixed() 方法可把 Number 四捨五入為指定小數位數的數字。 toFixed() 裡面的數為 0- 20 之間的整數。 var a = 1.23456 a.toFixed(2) = 1.23 toFixed
JAVA日期加減運算
1.用java.util.Calender來實現 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); System.out.println(calendar
Java對日期Date類進行加減運算,年份加減,月份加減
Date d=new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); System.out.println("今天的日期:"+df.format(d)); S
DecimalFormat類——Java中字串型別的數字加減報錯和精度缺失的解決辦法
編碼中加減乘除經常遇到,稍有不適,友誼的小船說翻就翻。 Demo來一發,做做記錄: //保留兩位小數 private DecimalFormat de
js加減乘除運算時失去精度問題解決方法
加法:/** * 加法運算,避免資料相加小數點後產生多位數和計算精度損失。 * * @param num1加數1 | num2加數2 */ fu
mysql中日期函數和日期的加減運算
一個數 hour %u rdate 時間值 範圍 ddd name 需要 mysql日期運算,日期函數 DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標準。 mysql> sel