저는 여전히 Java를 연구 중이며이 변환기에 대한 연습을하고 있습니다. 나는 다음과 같이 무언가를 썼다. 광부 문제는 작은 소수 부분을 변환 할 때 보통 정밀도 문제가 발생합니다 (이해하므로 실제로 계산에 사용 된 분수를 인쇄합니다).Java Denary to Binary Converter 정밀 조언
- 제한이 사용자의 입력에서 소수 공간과 출력
- 출력
약간의 정밀도 문제가있는 변환기를 사용할 때 사람들이이 문제에 대해 어떻게 생각하는지 알고 싶습니다. 전혀 문제가되지 않습니까? 그리고 어쨌든이 문제를 정말로 고칠 수 있습니까? 생각을 공유하십시오. 감사합니다 ^^
private static void DtoB() {
int power;
long i, integer;
double d, fraction, f;
System.out.println();
System.out.print("Plese enter the denary number: ");
//Break the number
d = getDouble(); //method that gets the valid input form user
integer = Math.abs((long)d);
fraction = Math.abs(d - integer);
i = integer; //store the original input for later use
f = fraction; //store the original input for later use
power = 1;
System.out.println("Integer part: "+i);
System.out.println("Fraction part: "+f);
System.out.println();
System.out.print("The binary form is: ");
//Convert the integer part
//get the largest power of 2 smaller than the number
while(integer != 0) {
while(power <= integer/2) {
power *= 2;
}
System.out.print("1");
integer -= power;
//get the rest 1 & 0 till the smallest power of 2
while(power > 1) {
power /= 2;
if (integer < power)
System.out.print("0");
else {
System.out.print("1");
integer -= power;
}
}
}
//Convert the fraction part
if (fraction < 1.0){ //check if there is a fraction part needs to convert
System.out.print(".");
while (fraction < 1.0 && fraction != 0) {
fraction *= 2;
if (fraction > 1.0) {
System.out.print("1");
fraction = (fraction - 1);
}
else {
System.out.print("0");
}
}
}
else if (fraction == 0) {
}
System.out.println();
}
조언을 주셔서 감사합니다. 저는 소수 부분을 두 개로 저장하므로 제로를 추적 할 필요가 없지만 정밀도 문제가 발생합니다. 그래서 만약 내가 문자열로 분수를 읽고 계산하기 전에 정수로 변환하면 더 정확한 결과를 얻을 수 있습니까? 나는 그것을 시도 할 것이다 :) – JoN