在Java中用小数计算的函数

时间:2010-08-16 22:13:10

标签: java calc

例如,当您键入22和56时,此代码可以正常工作,它会显示正确的结果

  import java.util.Scanner;

class apples{
    public static void main(String args[]){
    Scanner villy = new Scanner (System.in);
    double fnum, snum, answer;
    System.out.println("Enter first num: ");
    fnum = villy.nextDouble();
    System.out.println("Enter second num: ");
    snum = villy.nextDouble();
    answer = fnum + snum;
    System.out.println(answer);
    }
}

但是当你尝试将小数放在例如23.53和42.76时它失败并出现以下异常

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.nextDouble(unknown Source)
       at apples.main(apples.java:8)

4 个答案:

答案 0 :(得分:1)

查看您的例外的API说明。

  

班级InputMismatchException

     

由扫描程序抛出,表示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围

你可能没有投入你期望的输入;无论如何,扫描仪的“下一个”项目在某个时刻不是双倍的。

查看屏幕截图,您似乎正确使用了API。我怀疑Eclipse的内置控制台支持并不像扫描仪所期望的那样。尝试将方法的第一行更改为:

Scanner villy = new Scanner("23.53\n42.76\n");

这应该与您从输入流中获得的功能相同;如果这样可行则表明问题出在Eclipse的输入上。

要尝试的一件事,一般来说总是一个好主意,就是明确指定输入流的编码。您要发送的内容是字符,但您实际发送的是字节。如果Eclipse使用了一些不寻常的字符编码,并且默认情况下Scanner会猜到一个不同的编码,那么您将遇到问题。在扫描程序构造函数中指定实际编码将消除这种可能性。

另一个选择是Java运行的Locale实际上使用逗号作为小数分隔符。如果是这种情况,那么扫描仪是正确的,您没有正确指定双精度(虽然这也应该在基于字符串的示例上失败)。

答案 1 :(得分:1)

你是否有机会在非英语电脑上?例如,使用法语或德语语言环境,您必须输入23,53,而不是23.53

Scanner的默认语言环境是Locale.getDefault()返回的内容:在英语计算机上,它应该返回Locale.ENGLISH。您可以通过执行以下操作将语言环境设置为英语:

Scanner villy = new Scanner(System.in).useLocale(Locale.ENGLISH);

答案 2 :(得分:1)

输入数字时,您可能会输入逗号而不是句点。这将抛出InputMismatchException。我已经运行了代码,并且在正确输入类型的情况下工作正常,但是当我用其他任何字符替换句点时抛出InputMismatchException。

答案 3 :(得分:0)

以下代码段工作正常。你的问题必须在其他地方。 “失败”是什么意思?它会给你一个错误信息或例外吗?

double fnum=0, snum=0, answer = 0;
fnum=23.53;
snum=42.76;
answer=fnum+snum;
System.out.println("answer="+answer); //prints 66.28999999999999