當前位置:首頁 » 編程語言 » javadouble類型

javadouble類型

發布時間: 2022-12-22 22:38:53

java double數據類型運算問題

使用Java,double 進行運算時,經常出現精度丟失的問題,總是在一個正確的結果左右偏0.0000**1。
特別在實際項目中,通過一個公式校驗該值是否大於0,如果大於0我們會做一件事情,小於0我們又處理其他事情。
這樣的情況通過double計算出來的結果去和0比較大小,尤其是有小數點的時候,經常會因為精度丟失而導致程序處理流程出錯。
所以一般對double類型進行運算時,做好對結果進行處理,然後拿這個值去做其他事情。

目前總結如下:

/**

* 對double數據進行取精度.

* @param value double數據.

* @param scale 精度位數(保留的小數位數).

* @param roundingMode 精度取值方式.

* @return 精度計算後的數據.

*/

public static double round(double value, int scale,

int roundingMode) {

BigDecimal bd = new BigDecimal(value);

bd = bd.setScale(scale, roundingMode);

double d = bd.doubleValue();

bd = null;

return d;

}

/**
* double 相加
* @param d1
* @param d2
* @return
*/
public double sum(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.add(bd2).doubleValue();
}

/**
* double 相減
* @param d1
* @param d2
* @return
*/
public double sub(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.subtract(bd2).doubleValue();
}

/**
* double 乘法
* @param d1
* @param d2
* @return
*/
public double mul(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.multiply(bd2).doubleValue();
}

/**
* double 除法
* @param d1
* @param d2
* @param scale 四捨五入 小數點位數
* @return
*/
public double div(double d1,double d2,int scale){
// 當然在此之前,你要判斷分母是否為0,

// 為0你可以根據實際需求做相應的處理

BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.divide

(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}

這樣,計算double類型的數據計算問題就可以處理了。
另外補充一下 JavaScript 四捨五入的方法:
小數點問題

Math.round(totalAmount*100)/100 (保留 2 位)

function formatFloat(src, pos)
{
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}

Ⅱ 如何定義JAVA中double類型的數組

如果您在一定區間內初始化別的數,可以使用Fill方法。

第一步:聲明數組。

double[]arr=newdouble[50];

第二步:填充。(比如都初始化成3.14)

Arrays.Fill(arr,3.14)。

Ⅲ java double是什麼類型

double: 64位雙精度浮點數 ,范圍10^-308~10^308和-10^-308~-10^308
與之比較對應的是float,32位單精度浮點數 ,范圍10^-38~10^38和-10^-38~-10^38
對我們這種程序員來說,能用float就不用double,因為float比double運算速度快、佔用資源(內存)少。

Ⅳ 請問java中,Double類型和double有什麼不同能否轉換

Double 是類 double是基礎數據類型。Double類型是double的包裝類,在JDK1.5以後,二者可以直接相互賦值,稱為自動拆箱和自動裝箱。如果是這樣,可以用Double中的方法,將包裝類轉為基本數據類型。

可以轉換的。

Ⅳ java double類型

double類型直接進行運算會出現精度問題,可先轉換為字元串之後再進行運算。
import java.math.BigDecimal;
public class Arith {
// 默認除法運算精度
private static final int DEF_DIV_SCALE = 10;

// 這個類不能實例化
private Arith() {
}
public static double add(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.add(b2).doubleValue();
}

public static double sub(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.subtract(b2).doubleValue();
}
public static double mul(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.multiply(b2).doubleValue();
}
public static double div(double v1, double v2) {
return
div(v1, v2, DEF_DIV_SCALE);
}
public static double div(double v1, double v2, int scale)
{
if (scale < 0) {
throw new
IllegalArgumentException(
"The
scale must be a
positive integer or
zero");
}
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return b1.divide(b2, scale,
BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round(double v, int scale) {
if
(scale < 0) {
throw new
IllegalArgumentException(
"The
scale must be a
positive integer or
zero");
}
BigDecimal b = new
BigDecimal(Double.toString(v));
BigDecimal one = new
BigDecimal("1");
return b.divide(one, scale,
BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
public class test {
public static void main(String[] args)
{
double d1=0.2;
double d2=0.1;
double
d3=d1+d2;
System.out.println(Arith.add(d1,
d2));
System.out.println(Arith.sub(d1,
d2));
System.out.println(d3);
}
}

Ⅵ Java語言中類Double與基本類型double間有何關系

Double是包裝類,提供了一些可以對浮點數的操作方法;而double是基本類型;兩者之間可以相互轉換,如:Double
dou
=
new
Double(
double
x
=
0.90
),將x
=
0.90
包裝為了一個類;還可以將這個類還原為基本類型double,如下:
double
x
=
Double.parse.Double(
dou
);

熱點內容
美嘉演算法口訣 發布:2025-05-16 06:03:15 瀏覽:951
c程序編譯連接 發布:2025-05-16 06:02:36 瀏覽:963
腳本魔獸 發布:2025-05-16 06:01:52 瀏覽:329
文件夾python 發布:2025-05-16 06:01:43 瀏覽:626
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396