0

This program should count amount of digits in a number.
Here is my code:

import java.util.Scanner;

public class Converter {
    public static void main(String[] args) {
        Scanner marty = new Scanner(System.in);
        float sk; 

        System.out.println("Enter start number:  ");
        sk = marty.nextFloat();

        int numb = (int)Math.log10(sk)+1;
        System.out.println(numb);

        marty.close();
    }
}

I am getting this kind of error, while tryin to input number with 4 or more digits before comma, like 11111,456:

Exception in thread "main" java.util.InputMismatchException  
at java.util.Scanner.throwFor(Unknown Source)  
at java.util.Scanner.next(Unknown Source)  
at java.util.Scanner.nextFloat(Unknown Source)   
at Converter.main(Converter.java:11)

Any ideas about what the problem may be?

4

3 回答 3

0

就像许多人所说的那样,逗号把你搞砸了。

如果您的输入需要逗号,您可以考虑的一种选择是在尝试计算位数之前替换输入字符串中的逗号。

System.out.println("Enter start number:  ");
String input = marty.nextLine();

float sk = Float.parseFloat(input.replace(",", ".")); // use input.replace(",", "") if you want to remove commas

int numb = (int)Math.log10(sk)+1;
System.out.println(numb);
于 2014-10-01T21:42:38.820 回答
0

输入数字时,除非您希望将其拆分,否则不应包含逗号。如果需要小数,请使用“。” 反而。如果您想要大于 999 的数字,请不要包含逗号

于 2014-10-01T21:18:49.693 回答
0

取一个数字的 log (base10) 并加 1 无论如何都不会为您提供输入数字位数的正确答案。

您给定的 11111.465 示例有 8 位数字。这个数字的 log10 是 4.045...加 1 会得到 5 的答案。

另一个例子:99, Log10(99) = 1.99, cast as int = 2, add 1 = 3...显然只有2位数。

您可以将输入读取为字符串,然后执行以下操作

int count = 0;
String s = /* (Input Number) */
for(char c : s.toCharArray())
{
    if(Character.isDigit(c))
        count++;
}

您还必须通过检查它的模式来检查它实际上是一个数字......

于 2014-10-01T21:34:59.763 回答