Базовые преобразования - десятичные в восьмеричные
В приведенном ниже коде я пытаюсь преобразовать 15 базовых 10 в его значение в базовых 8, которое равно 17. Но вместо этого программа ниже дает мне 13, а не 17. Метод baseEight
получает 15 как string
тогда я понимаю, что Integer.parseInt baesEight
принимает значение 15 и преобразует его в базовое значение 8, которое должно быть 17. Но это не так. Я не уверен, что это не так.
import acm.program.*;
public class BaseCoversion extends ConsoleProgran{
public void run(){
int a = 15;
String a = Integer.toString(a);
println(a);
}
private int baseEight(String s) {
return Integer.parseInt(s , 8 );
}
}
3 ответа
Чтобы получить восьмеричное представление числа, вам нужно либо передать основание Integer.toString(int, int)
метод или использование Integer.toOctalString(int)
метод:
int a = 15;
String s = Integer.toOctalString(a);
System.out.println(Integer.parseInt(s));
Integer.parseInt(String, int)
анализирует строку, используя заданное основание Вы этого не хотите. Вывод, который вы запрашиваете, представляет собой просто представление числа в базе 8
,
15 в базе 8 на самом деле 13:)
Вы могли бы использовать Integer.toOctalString(number)
или использовать yourInteger.toString(8)
если вы хотите восьмеричное представление числа в виде строки
Для вашего случая это будет:
int a = 15;
String s = Integer.toOctalString(a);
println(s);
Что не так, так это то, что parseInt(s,8) анализирует строку ОТ базы 8, а не базы 8.
РЕДАКТИРОВАТЬ: я забыл добавить, что есть Integer.toOctalString, которая, вероятно, функция, которая вам нужна.