小数点后的位数,包括最后一个零

时间:2019-02-27 18:59:09

标签: 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.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。

如何解决此问题?谢谢!

4 个答案:

答案 0 :(得分: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.");
        }
    }
}

答案 1 :(得分:0)

这是因为当您进行语法分析以加倍时,您会丢失尾随零,因为4.90被转换为4.9。在将其解析为两倍之前计算长度,它应该可以工作。

答案 2 :(得分:0)

4.9或4.90作为double都由相同的近似值表示。它们之间没有区别。

当然,您可以对输入使用String处理来执行所需的操作。但是,您可能会发现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

答案 3 :(得分:0)

Omari,我像这样调整了您的代码,它成功了,谢谢!

if(result [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" );     
      }