我的问题是如何在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
答案 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的用途。