私は、10進数と10進数の部分を加算するために、スタックとリンクリストを使用するために、ある精度でバイナリをバイナリに変換するコードを実装しようとしています。次に、Stringbuilderを使用して要素を1つずつポップ/ポーリングして最後の2進数を求めます。ソース:http://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/スタックおよびリンクリストのJAVAに番号がありませんか?
スタック/リストに要素をプッシュすると、それらがプッシュされているのがわかります(o/p stmtsを使用しています)。何らかの理由で私は要素を飛び出すときにそれらを見ない。ここ
は私のコードは
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
パブリッククラスBinaryToDecimal {
public String toBinary(float n, int p){
int non_dec = (int) Math.floor(n);
Stack<Integer> s_non_dec = new Stack<>();
LinkedList<Integer> q_dec = new LinkedList<>();
float dec = n - non_dec;
int quotient = 1;
while(quotient > 0){
quotient = non_dec/2;
int remainder = non_dec%2;
System.out.println("quotient"+quotient+"non_dec"+non_dec+"remainder"+remainder);
s_non_dec.push(remainder);
non_dec = quotient;
}
while(p>0){
System.out.println("before dec"+dec);
dec = dec*2;
System.out.println("after dec"+dec);
if(dec >=1){
System.out.println("add 1");
q_dec.add(1);
dec = dec - 1;
}
else{
System.out.println("add 0");
q_dec.add(0);
}
p--;
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<s_non_dec.size();i++){
System.out.println("pop"+s_non_dec.peek());
sb.append(s_non_dec.pop());
}
sb.append('.');
for(int i=0;i<q_dec.size();i++){
System.out.println("poll"+q_dec.peek());
sb.append(q_dec.poll());
}
return sb.toString();
}
public static void main (String args[]){
BinaryToDecimal btd = new BinaryToDecimal();
System.out.println(btd.toBinary(2.47f, 5));
}
}
マイ出力される。
quotient1non_dec2remainder0
quotient0non_dec1remainder1
before dec0.47000003
after dec0.94000006
add 0
before dec0.94000006
after dec1.8800001
add 1
before dec0.8800001
after dec1.7600002
add 1
before dec0.7600002
after dec1.5200005
add 1
before dec0.52000046
after dec1.0400009
add 1
pop1
poll0
poll1
poll1
1.011
Iは1を押してもタフ、上で見たように0私のスタックには、私の出力は、1と0の代わりに小数点以下の部分に対して1つしかありません!同じことが小数部分にも起こります! 私は何時間もこのコードを見てきました。