Мой вопрос в том, как вы можете перевернуть десятичную дробь в Java?

Такие числа, как 0,5, 0,8 и т. Д.

Все мои попытки воспроизвести этот код с использованием переменной типа double вместо int буквально вынудили мой терминал вывести "Infinity" или символ бесконечности.

import java.util.*; 
public class Example
{
    public static void main(String[] args)
    {                       
        int d = 0, 
               Result = 0;

        Scanner in = new Scanner(System.in); 

        System.out.print("enter a number: ");

        d = Integer.parseInt(in.nextLine()); 

        while(d > 0)
        { 
            Result = (Result * 10) + d % 10; 
            d = d / 10;
        } 

        System.out.println("\nThe Reversed Number Is: " + Result);          

    }
} 

РЕДАКТИРОВАТЬ: Извините, ребята, я хотел вставить вывод.

Итак, если бы вы запустили эту программу, результат выглядел бы так (в зависимости от введенных вами чисел)

enter a number: 123456789

The Reversed Number Is: 987654321 

Мой желаемый результат будет выглядеть следующим образом

Enter a decimal number: 0.5

The Reversed number is: 5.0 


import java.util.*; 
public class Example
{
    public static void main(String[] args)
    {                       
        double d = 0, 
               Result = 0;

        Scanner in = new Scanner(System.in); 

        System.out.print("enter a number: ");

        //d = Double.parseDouble(in.nextLine()); 
        //^ That will not cut off any result lol

        d = in.nextDouble(); 

        while(d > 0)
        { 
            Result = (Result * 10) + d % 10; 
            d = d / 10;
        } 

        System.out.println("\nThe Reversed Number Is: " + Result);          

    }
} 

enter a number: 0.5

The Reversed Number Is: Infinity
// The above result used d = Double.parseDouble(in.nextLine()) 



 //The below output used d = in.nextDouble(); 

Единственное различие между этими двумя методами приема ввода состоит в том, что один учитывает людей, не следующих направлениям, а другой - нет. Конечно, здесь нет попытки или уловить и т. Д. Или что-то здесь, чтобы прекратить, если что-то, кроме числа, введено. и этого не должно быть. Дело в том, что оба этих метода ввода будут давать одинаковые результаты.

enter a number: 5.0

The Reversed Number Is: Infinity
-1
Afflicted 21 Фев 2016 в 20:52

2 ответа

Лучший ответ

Я бы использовал BigDecimal, потому что вы работаете с десятичными знаками. например. 0,1 - это повторяющееся число по основанию два. Таким образом, он будет усечен.

BigDecimal d = new BigDecimal(in.nextLine());

С десятичными знаками значение не обращается в ноль, когда вы делите на 10 так же, как это делает int. Например. 123 деленное на десять становится, 12.3. Итак, ваш предыдущий алгоритм не сработает. Также вы не знаете, насколько правее номер заканчивается. Это можно сделать:

int n = 0;
while(d.remainder(BigDecimal.ONE).intValue()>0){
    d = d.movePointRight(1);
    n++;
}

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

0
matt 21 Фев 2016 в 18:41

Вы довольны изменением строкового представления?

String input = d.toString();
String reversed = new StringBuffer(input).reverse().toString();

System.out.println("The Reverse of input is " + reversed);   
1
Eric 21 Фев 2016 в 18:02