簡體   English   中英

Java雙變量問題

[英]Java- double variable issue

這是我簡單的方程式計數器,現在它計算帶有兩個變量的方程式,它基於嘗試ab變量的許多組合(400萬或16百萬),因此代碼運行良好且計數准確,但是由於我嘗試更改變量b會翻倍,這會出錯。我期望b=b+0.1行將第10次設置變量b確保為1.0。但是在啟動之后幾乎幾乎是每個步驟b都會出現更多的十進制數,那么我使用錯誤的數據類型嗎? 還是應該將變量b增加不同的值?(我還嘗試將所有變量都更改為double)。謝謝您的建議!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Buffer{
static int a;
static double b;
static BufferedReader reader;
static String query;
static int range;
static int result;

public static void main(String[] args)throws IOException{
    reader=new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Choose speed of test(fast or slow):");
    query=reader.readLine();

    if(query.equals("fast"))
        range=2000;
    else
        range=4000;

     //START THE TEST//       
    while((a+b)!=26000){
        b=b+0.1;
        if(b==range+1){
            b=0;
            a=a+1;
        }
        if((a+b)!=26000)
            System.out.println("a- "+a+", "+"b- "+b+"=false.");

        if((a+b)==26000){
            System.out.println("a- "+a+", "+"b- "+b+"=true.");
            System.out.println("\n"+"Done.You can possibly solve this equation, if a= "+a+" and b= "+b+".");
        }
        if(a==range&&b==range&&(a+b)!=26000){
            System.out.println("\n"+"Tested "+a*b+" options.Solution not found.");
            System.exit(0);
        }
    }   
}
}

您可以使用BigDecimal而不是float / double原語來避免這些問題。 這里描述了其中一些: Java錯誤1-使用浮點和雙精度進行貨幣或財務計算

您要處理的問題是制圖表達錯誤 類型double無法代表某些值。

這種情況的典型解決方案是使用BigDecimal或Integer類型。

這里的每個人都為您提供了替代解決方案,但我想您應該理解,為什么數據類型double不適用於您。

問題在於Binary representation 對於小數,不以確切的形式表示。 例如說:

10 is represented as 1010 in binary 但是

0.10 is 0.00011001100110011001100110011001 and still going on.....

因此,該錯誤會發生兩次。 正如其他人建議的那樣,選擇BigDecimal。

您也可以通過這些鏈接了解更多有關此的信息。

舍入誤差

雙打加法

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM