JAVA中double型別計算精度控制
偶遇一個問題,進行如下計算
public class Demo { public static void main(String[] args) { int i = 1; double d = i*0.005; System.out.println(d); } } 使用JDeveloper開發時,計算結果得到了0.0050,精度出現問題。
又在Eclipse上測試了一下,發現結果是正確的。
很困惑為什麼不同的開發工具會有不同的結果。如果有大神知道還請告知。
但問題還是要解決的,因此使用精度控制的方法
import java.text.DecimalFormat;
public class Demo { public static void main(String[] args) { int i = 1; double d = i*0.005; DecimalFormat df = new DecimalFormat("#.###"); System.out.println(df.format(d)); } }
則可以得到正確的結果。
相關推薦
JAVA中double型別計算精度控制
偶遇一個問題,進行如下計算 public class Demo { public static void main(String[] args) { int i = 1; double d = i*0.005; System.out.println(d);
Java中Double型別的精確計算
複製程式碼 import java.math.BigDecimal; public class DoubleUtil { private static final int DEF_DIV_SCALE = 5; // 小數點後的保留位數 /** * Dou
java中double型別資料加減操作精度丟失問題及解決方法
double型別資料加減操作精度丟失問題 今天在專案中用到double型別資料加減運算時,遇到了一個奇怪的問題,比如1+20.2+300.03,理論上結果應該是321.23,其實結果並不是這樣。 public double add() {
java中Double型別的運算精度丟失的問題 (小數點多出99999999999999)
在使用Java,double 進行運算時,經常出現精度丟失的問題,總是在一個正確的結果左右偏0.0000**1。 特別在實際專案中,通過一個公式校驗該值是否大於0,如果大於0我們會做一件事情,小於0我們又處理其他事情。 這樣的情況通過double計算出來的結果去和0比較
Java中double型別精度丟失問題
首先,之所以double浮點數型別中會出現精度不準確這個問題,是因為浮點數在計算機的儲存方法導致的,要想具體瞭解的話,可以檢視《計算機組成原理》這本書,裡面有比較詳盡的解答。 接下來由一道題來引出接下來要講的這個問題: 對任意給定的一個doubl
java中double型別的記憶體表示
轉自[http://bbs.csdn.net/topics/260050279] 浮點數儲存的位元組格式如下: 地址 +0 +1 +2 +3 內容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 這裡 S 代表符號位,1是負,0是正 E 偏移1
java中double型別顯示兩個小數,比如12.00
本在載自:http://blog.csdn.net/chaozhidan/article/details/8161862 Double型別的資料如何保留兩位小數? 各位大蝦,現有Double型別的資料,如何轉換為保留兩位小數的數,返回值的型別仍然是Double型別的,而不
Java中double型別比較大小或相等的方法
在Java中int型別資料的大小比較可以使用雙等號,double型別則不能使用雙等號來比較大小,如果使用的話得到的結果將永遠是不相等,即使兩者的精度是相同的也不可以。下面介紹兩種比較double資料是否相等的方法。 第一種方法:轉換成字串 如果要比較的兩個double資料的
Java中double型別四捨五入的方法總結
//方法一: BigDecimal bd= new BigDecimal(a); Double b = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println("方法一: "+b); //方法二: Double my
Java中double型別的資料精確到小數點後兩位
轉自:http://blog.sina.com.cn/s/blog_69bd73800100yaej.html 多餘位四捨五入,四種方法 一: double f = 111231.5585; BigDecimal b = new BigDecimal(f); do
Java中double型別保留兩位小數
java中對double型別的小數經常會有小數點後邊保留一位小數或者保留兩位小數的需求。 javaAPi中提供了一個專門的類BigDecimal,用來對超過16位有效位的數進行精確的運算。 使用步驟:
java中double型別如果小數點後為零顯示整數,否則保留
//方法一 public static String doubleTrans1(double num) { if(num % 1.0 == 0) { return String.valueOf((long)num); } return String.value
Java 中double和float型別計算丟失精度問題總結
背景 問題發生在某天中午,當我訂單付完款後,不想要了就點選了全額退款,但是給我的提示確實 “您輸入的金額不正確”,我就納悶了,為什麼不能退?看了下程式碼,然後就發現了問題... 1、bigdecimal 轉換成小數計算有誤差 真實專案中校驗退款金額是否超過訂單實付款
java中double的精度去哪了[轉]
blank ble 四舍五入 img http 得到 .html 浮點 .com 我們知道,浮點數值采用二進制系統表示,二進制系統無法精確表示1/10,就好像十進制無法精確表示1/3 。 所以,我們采用四舍五入/保留小數位方式以獲得精簡數值。 那麽,問題來了
java 中基本型別之間的轉換 String double long int
將String轉化為Double、Long、Integer 一、java中字串轉換成Double型別 Double doubleType = Double.parseDouble(String) 二、java中字串轉換成Long型別 Long
java中的數學計算(大整數,小數計算精度)
BigInteger:可以實現大整數計算構造方法:BigInteger(String val)注意:尋常Integer是有著明確的數字上限的,它的數值上限是2147483647。因此,如果需要表示超過此數的值,則應該使用BigInteger作為資料型別。BigInteger做
C++中float與double型別的精度區別
double精度高,有效數字15-16位,float精度低,有效數字6-7位,但是double消耗的記憶體是float的兩倍,運算速度比float慢得多,建議能用float保證精度的就用float,少用double。 #include <iostream> #
DecimalFormat類——Java中字串型別的數字加減報錯和精度缺失的解決辦法
編碼中加減乘除經常遇到,稍有不適,友誼的小船說翻就翻。 Demo來一發,做做記錄: //保留兩位小數 private DecimalFormat de
Java double型別加法精度問題
近日在工作中使用double型別相加,發現結果精度出現問題。百度驗證後得到答案,特此記錄。double型別資料相加的時候直接使用+號,得到的結果會出現精度誤差所以需要使用BigDecimal函式進行運算double v1 = 4.5; double v2 = 4.55; Bi
聊一聊Java中double精度去哪了
前段時間, 因為要測試一個剛出爐的高頻策略, 放實盤去跑吧, 怕出岔, 所以寫了個簡單的回測系統, 跑一遍歷史資料. 其中有一部分是關於撮合系統, 簡陋了點, 還算能跑得起來, 幾個用例下來, 也沒什麼問題, 接著增加歷史資料量, 居然出現了負數, 簡直不可能發生的事情居然出現了, 雖然都是小金額的偏差,