你如何反转像0.5这样的十进制数

时间:2016-02-21 17:52:40

标签: java

我的问题是如何在java中反转小数?

数字如0.5,0.8等。

我使用双变量而不是int来重现此代码的所有尝试都会导致我的终端输出"无限"或无限的符号。

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

2 个答案:

答案 0 :(得分:1)

您是否满足于扭转字符串表示形式?

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

System.out.println("The Reverse of input is " + reversed);   

答案 1 :(得分:0)

我会使用BigDecimal,因为你正在使用小数。例如。 0.1是碱基2中的重复数。所以它会被截断。

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

使用小数时,除以10与int相同的方式时,该值不会变为零。例如。 123除以10成为12.3。所以你以前的算法不会起作用。你也不知道这个数字到底有多远。可以这样做:

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

在循环结束后,你有一个实际上是整数的BigDecimal。您可以使用以前的算法,但需要将小数点放回正确的位置。这是n的用途。