Количество цифр после запятой, включая последний ноль - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть это,

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 голосов
/ 27 февраля 2019

Омари, я настроил твой код следующим образом, и это сработало, спасибо!

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" );     
      }
0 голосов
/ 27 февраля 2019

Поскольку вы уже читаете ввод в виде строки, вы можете сохранить это значение и затем проверить, является ли оно действительным десятичным числом:

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.");
        }
    }
}
0 голосов
/ 27 февраля 2019

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
0 голосов
/ 27 февраля 2019

Это потому, что когда вы анализируете удвоение, вы теряете конечные нули, поскольку 4.90 преобразуется в 4.9.Вычислите длину, прежде чем разбирать ее вдвое, и она должна работать.

...