2014-05-12 84 views
1

我的代碼的目的是爲了轉換二進制數字(字符串)N爲十進制形式 該程序段成功地編譯但輸出快到方式大於預期。輸出錯誤:二進制到十進制的Java

需要一些help.Thanks提前

public class bindecstr { 
public static void main(String args[]){ 
    String s="11111"; 
    int l=s.length(); 
    double sum=0; 
    int t=l-1; 
for(int i=0;i<l;i++){ 
    char ch=s.charAt(i); 
    int x=(int)ch; 
    double d=(Math.pow(2,t-i))*x; 
    sum=sum+d; 
} 
System.out.println(sum); 
} 
} 
+0

請添加一些具體的變化 – Abhinav

回答

3

這是因爲s.charAt(i)是位的字符代碼,而不是它的數值。爲'0' Unicode代碼點是U+0030;對於'1',它是U+0031

更改爲

int ch=s.charAt(i) - '0'; 

來解決問題(demo on ideone)。這起作用的原因是數字的代碼點是按順序排列的。從另一個十進制數字的代碼點中減去零的代碼點產生代碼點與對應的數字,對應於數位的數字值之間的「距離」。

+0

無變化在輸出 – Abhinav

+1

@ user2511145然後你不這樣做是正確的(見演示,鏈接點擊,這是你的固定代碼,並正確打印31)。 – dasblinkenlight

+0

我試過了,它worked.Can你認爲什麼辦法可避免unicode的麻煩,因爲我現在 – Abhinav

0

試試這個

int x = (int) ch - '0'; 
-1

當你把INT X =(INT)通道; 救x中的值不爲1個的對應的Unicode值是49 所以採取的一個,你會需要if語句的真正價值在for循環
char ch=s.charAt(i); if(ch=='1') x=1 if(ch=='0') x=0