Код из двух частей для двоично-десятичного преобразования не дает желаемого результата для дробных двоичных чисел - PullRequest
0 голосов
/ 05 ноября 2018

Ввод «111» выдает 7.0, как требуется, но «111.111» выдает «7.0». Что не так с дробной частью этого? Здесь «len» относится к длине строки. IDE не выдает никаких предупреждений или ошибок. Где логика ошибочна?

Приложение: Я знаю, что метод parseint также работает нормально. Но просто хотел написать свою собственную функцию: Редактировать: Скопировал с небольшой опечаткой .. исправлено.

Программа драйвера:

public static void main(String args[]){
     bClass instantiate = new bClass();String b="";
     Scanner In = new Scanner(System.in);
     System.out.println("Enter binary value");
     b = In.nextLine();
     System.out.println(instantiate.BinaryToDecimal(b,b.length()));
     System.out.println("Thank You");
} 

Функция:

 double BinaryToDecimal(String bin,int len){
    String temp = bin; String fpart=""; String intpart=""; String Binary=""; 
    double BinaryI = 0; double BinaryF=0;
    int p= 0; char[] binary = bin.toCharArray();
    for(p=0;p<len;p++){
         if(binary[p]=='.'){ 
              break;
         }
    }
    int base=1;
    for(int i = p-1;i>=0;i--){
         BinaryI+=(binary[i]-'0') * base;
         base*=2;
    }
    base=2;
    for(int i=p+1;i<len;i++){
         BinaryF+=(binary[i]-'0') / base;
         base*= 2;
    }
}

1 Ответ

0 голосов
/ 05 ноября 2018

https://www.geeksforgeeks.org/convert-binary-fraction-decimal/

  1. Сначала целую часть нужно умножить на степень 2.
  2. Во-вторых, часть с плавающей точкой должна быть разделена на степень 2.

Обратитесь по ссылке выше для ясного объяснения.

В приведенной выше функции деление выполняется целочисленной переменной, которая усекает результат. Поэтому я заменил переменную с плавающей точкой.

static double BinaryToDecimal(String bin,int len){
    String temp = bin; String fpart=""; String intpart=""; String Binary=""; 
    double BinaryI = 0; double BinaryF=0;
     int p= 0; char[] binary = bin.toCharArray();
    for(p=0;p<len;p++){
    if(binary[p]=='.'){ 
    break;
    }
    }
    int base=1;
    for(int i = p-1;i>=0;i--){
    BinaryI+=(binary[i]-'0') * base;
    base*=2;
    }

    float fbase=2;
    for(int i=p+1;i<len;i++){
        BinaryF+=(binary[i]-'0') / fbase;
        fbase*= 2;
    }
    return (BinaryI+BinaryF);
}

Как получить полное значение дроби результата деления в Java?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...