Java中浮點數相減造成損失的簡單解決方法
今天遇到個問題:double m1 = 0.09 m1 = m1 - 0.05 結果m1卻不是0.04而是0.039999999999999994!
查資料說是java遵循IEEE754浮點數的運算規範,使用分數與指數表示浮點數
如:0.5使用1/2表示,0.75會使用1/2+1/4+1/8;而0.1會用1/16+1/32+1/256+1/512+1/4096+1/8192+......表示;
解決方法:
很簡單,強制轉換成整型再輸出就得了。。
所以
//得出的m1值為0.039999999999999994 double m1 = 0.09; double x = 0.05; m1 = m1 -x;
改正為:
//得出的m1值為0.04
double m1 = 0.09;
double x = 0.05;
m1 = ((double)((int)(m1*100) - (int)(x*100)))/100;
相關推薦
Java中浮點數相減造成損失的簡單解決方法
今天遇到個問題:double m1 = 0.09 m1 = m1 - 0.05 結果m1卻不是0.04而是0.039999999999999994! 查資料說是java遵循IEEE754浮點數的運算規範,使用分數與指數表示浮點數 如:0.5
java中 浮點數轉為字串
float scale = this.getResources().getDisplayMetrics().density; tv_hello.setText(Stri
Java中IO流讀取文字出現亂碼的解決方法
在編寫IO程式碼時,發現在讀取含有中文欄位的文字時,出現了亂碼,所以就查找了一下解決辦法,這裡借用一下其他博主的總結: 轉載地址:https://blog.csdn.net/qq_28950007/article/details/50760899 第一種方法:(不知道檔案的編碼),那通過
Java中NullPointerException異常的原因詳解以及解決方法
NullPointerException是當您嘗試使用指向記憶體中空位置的引用(null)時發生的異常,就好像它引用了一個物件一樣。 當我們宣告引用變數(即物件)時,實際上是在建立指向物件的指標。考慮以下程式碼,您可以在其中宣告基本型別的整型變數x: int x; x = 10; 在
Java中Calendar.DAY_OF_WEEK需要減一的原因
lsp spa 新手 註意 規則 ava 第幾天 返回 區分 Java中對日期的處理需要用到Calendar類,其中有幾個方法在使用時需要新手註意。 1. 在獲取月份時,Calendar.MONTH + 1 的原因(Java中Calendar.MONTH返回的數值其實是當前
NOI-1.3-11-計算浮點數相除的余數
noi 雙精度 精度 top sca 小數 page con -1 11:計算浮點數相除的余數 查看 提交 統計 提問 總時間限制: 1000ms 內存限制: 65536kB描述 計算兩個雙精度浮點數a和b的相除的余數,a和b都是正數的。這裏余數(r)的定義是:
C語言中浮點數在內存中的存儲方式
大端 部分 由於 包含 指數 類型 計算機 data- trac 關於多字節數據類型在內存中的存儲問題 //////////////////////////////////////////////////////////////// int ,short 各
1029計算浮點數相除的余
style oat 類型 默認 main 才會 using col 輸出 1 #include<cstdio> 2 using namespace std; 3 int main() 4 { 5 double a,b,r; 6 in
Java有關浮點數精度——指定精確小數位
一般有4種方法,下面進行簡單總結。 1.BigDecimal.setScale(int newScale,RoundingMode roundingMode) (1)語法 引數newScale:保留的小數位數 roundingMode:保留模式,包括 BigDecimal.ROUND_DOWN :直
java學習—浮點數的
一、浮點數 浮點數的double是最常用的,float是有時難以滿足精度要求。 二、浮點數的誤差 不要用浮點數去參加運算和數值比較,會出現誤差,如下面的程式: 使用BigDecimal類來去除誤差,BigDecimal是大數值的意思,可以精確的表示小數。如下面的程式碼: Bi
資料結構演算法題/陣列中兩個數相減(前面減後面)的最大值
陣列中兩個數相減(前面減後面)的最大值。 解法一:O(n^2) 就是一個很普通的方法。求出 陣列中所有下標小的元素減去下標大的元素,找出其中的最大值即可。程式碼如下: //O(N^2) 找出陣列arr中兩個數相減的最大值 public static int m
資訊奧賽一本通-1029:計算浮點數相除的餘
【題目描述】 計算兩個雙精度浮點數a和b的相除的餘數,aa和bb都是雙精度浮點數。這裡餘數(r)(r)的定義是:a=k×b+ra=k×b+r,其中kk是整數,0≤r<b0≤r<b。 【輸入】 輸入僅一行,包括兩個雙精度浮點數aa和bb。 【輸出】 輸出也僅一行,a÷b
計算機中浮點數的表示,IEEE 754標準
IEEE Standard for Floating-Point Arithmetic(IEEE 754,Institute of Electrical and Electronics Engineers)是1985年建立的浮點數計算的技術標準。解決了原來浮點數實現不一致的問題,許多硬體
浮點數加減運算中左規右規問題
當尾數用二進位制表示時,浮點規格化的定義是尾數M應滿足: 1/2 ≤ |M|<1 顯然對於正數而言,有M = 00.1φφ…φ;對於負數,其補碼形式為11.0φφ…φ(即-0.0*******,左歸)。這
浮點數加減運算
浮點運算要把階碼和尾數分別處理。 階碼的運算是定點整數運算,對階碼的運算四種:階碼加1,階碼減1,兩階碼求和,兩階碼求差。 尾數的運算是定點小數運算,運算過程中一般取雙符號位 浮點運算器總是由處理階碼和處理尾數的兩部分組成 浮點數的溢位(Overflow) 當一
JS中浮點數總結
浮點數的運算在業務中是比較常見的,js浮點數運算會出現多位小數,如0.1+0.2 = 0.30000000000000004, 這是由於在運算的時候先把浮點數轉化成二進位制後進行運算,但是有的小數在二進位制編碼後出現無限迴
jquery中浮點數運算結果保留兩位小數的方法
今天在偶然用到了一個簡單的運算,38.6-38.2,結果竟然是0.3999999999999986,一般來說肯定是0.4。 通過查詢,瞭解到,計算機內部的二進位制是無法精確表達0.1,0.2之類的數字的。 原理: 像簡單的0.1 用十進位制表示:1×10^-1 ,也就是0.1 而用二進位制表
計算機基礎——浮點數加減運算
•十進位制科學計數法的加法例子 1.123 × 10^5 + 2.560 ×10^ 其計算過程為: 1.123 ×10^5 + 2.560 ×10^2 = 1.123 ×10^5 + 0.002560 ×10^5 &n
java 對浮點數取整方法floor,…
在java中的Math類中有三種方法對浮點數取整 floor //向下取整 ceil //向上取整 round //四捨五入取整 例如: Math.floor(1.3); // 1 Math.floor(1.7); //1 Math.ceil(1.3); //2 Math.ceil(1.7); //
【轉】QT中QDataStream中浮點數輸出問題
先上程式碼: C/C++ code ? 1 2 3