Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算小数点后的数字,包括最后的零_Java_String_Double_Decimal_Tostring - Fatal编程技术网

Java 计算小数点后的数字,包括最后的零

Java 计算小数点后的数字,包括最后的零,java,string,double,decimal,tostring,Java,String,Double,Decimal,Tostring,我有这个 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

我有这个

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。它忽略零并返回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,我这样调整了你的代码,成功了,谢谢

如果(结果[0]。长度()==0){


在转换为双精度码之前,您计算过长度吗?如果您将
“4.90”
转换为双精度码,您将得到
4.9
。然后如果您转换回字符串,您将得到
“4.9”
。谢谢大家,我现在了解了它背后的逻辑Hanks Omari,它工作了,但没有捕捉到所有错误。我必须调整它,它工作了。当输入类似1.的内容时,它没有捕捉到异常,现在它成功了does@RoiboisTx这是因为在解析值
1
时,可以将其转换为十进制数,因为它是等价的nt到
1.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" );     
      }