计算小数点后的数字,包括最后一个零
Count digits after decimal including last zero
我有这个,
import java.util.Scanner;
public class StringDecimalPartLength {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a decimal number: ");
Double string_Temp = Double.parseDouble(input.nextLine().replace(',', '.'));
String string_temp = Double.toString(string_Temp);
String[] result = string_temp.split("\.");
System.out.print(result[1].length() + " decimal place(s)");
}
}
它一直有效,直到我输入一个尾随零的数字,例如 4,90。它忽略零和 returns 1。
如何解决这个问题?谢谢!
由于您已经将输入读取为字符串,您可以保存该值,然后测试它是否是有效的十进制数:
import java.util.Scanner;
public class StringDecimalPartLength {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a decimal number: ");
String value = input.nextLine().replace(',', '.');
try {
Double.parseDouble(value);
String[] result = value.split("\.");
System.out.print(result[1].length() + " decimal place(s)");
} catch (NumberFormatException e) {
System.out.println("The entered value is not a decimal number.");
}
}
}
4.9 或 4.90 作为 double
均由相同的近似值表示。它们之间没有区别。
当然,您可以对输入使用字符串处理来做您想做的事。但是,您可能会发现 BigDecimal
是一种更适合您所做工作的数据类型。它区分了4.9和4.90,并且可以准确地代表它们中的每一个。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
System.out.println(new BigDecimal(4.9));
System.out.println(new BigDecimal(4.90));
BigDecimal x1 = new BigDecimal("4.9");
System.out.println(x1);
System.out.println(x1.scale());
BigDecimal x2 = new BigDecimal("4.90");
System.out.println(x2);
System.out.println(x2.scale());
}
}
输出:
4.9000000000000003552713678800500929355621337890625
4.9000000000000003552713678800500929355621337890625
4.9
1
4.90
2
Omari,我像这样调整了你的代码并且成功了,谢谢!
if(结果[0].length() == 0 ){
System.out.print("The entered value is not a decimal number.");
}
else {
System.out.print(result[1].length() + " decimal place(s)");
}
} catch (NumberFormatException e) {
System.out.println("The entered value is not a decimal number.");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.print("Error Message" );
}
我有这个,
import java.util.Scanner;
public class StringDecimalPartLength {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a decimal number: ");
Double string_Temp = Double.parseDouble(input.nextLine().replace(',', '.'));
String string_temp = Double.toString(string_Temp);
String[] result = string_temp.split("\.");
System.out.print(result[1].length() + " decimal place(s)");
}
}
它一直有效,直到我输入一个尾随零的数字,例如 4,90。它忽略零和 returns 1。
如何解决这个问题?谢谢!
由于您已经将输入读取为字符串,您可以保存该值,然后测试它是否是有效的十进制数:
import java.util.Scanner;
public class StringDecimalPartLength {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a decimal number: ");
String value = input.nextLine().replace(',', '.');
try {
Double.parseDouble(value);
String[] result = value.split("\.");
System.out.print(result[1].length() + " decimal place(s)");
} catch (NumberFormatException e) {
System.out.println("The entered value is not a decimal number.");
}
}
}
4.9 或 4.90 作为 double
均由相同的近似值表示。它们之间没有区别。
当然,您可以对输入使用字符串处理来做您想做的事。但是,您可能会发现 BigDecimal
是一种更适合您所做工作的数据类型。它区分了4.9和4.90,并且可以准确地代表它们中的每一个。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
System.out.println(new BigDecimal(4.9));
System.out.println(new BigDecimal(4.90));
BigDecimal x1 = new BigDecimal("4.9");
System.out.println(x1);
System.out.println(x1.scale());
BigDecimal x2 = new BigDecimal("4.90");
System.out.println(x2);
System.out.println(x2.scale());
}
}
输出:
4.9000000000000003552713678800500929355621337890625
4.9000000000000003552713678800500929355621337890625
4.9
1
4.90
2
Omari,我像这样调整了你的代码并且成功了,谢谢!
if(结果[0].length() == 0 ){
System.out.print("The entered value is not a decimal number.");
}
else {
System.out.print(result[1].length() + " decimal place(s)");
}
} catch (NumberFormatException e) {
System.out.println("The entered value is not a decimal number.");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.print("Error Message" );
}