Java双输入

时间:2012-08-19 16:01:21

标签: java formatting decimal

我试图让用户自由地输入他自己风格的数字,就像他可以选择输入2或2.00但是你知道双重不能接受这个(2)。我希望双人只接受2位小数(基本上我代表钱)。  这就是我不知道如何获取输入并将其转换为2decimals格式。 java.tks的新手

尝试谷歌但无法找到我可以在输入本身格式化的地方,意味着甚至不让用户输入除2decimal地点以外的任何其他小数位,而不是在输入到多个不同变量后进行后处理。,tks

public static void add()
{
 double accbal;
   Scanner sc = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("0.00");

        System.out.println("Enter account balance");
        accbal =  sc.nextDouble();
 //this is the part where i need to know the entered value is formated to only 2 decimal places

}

3 个答案:

答案 0 :(得分:1)

试试这个:

    DecimalFormat  df = new DecimalFormat ("#.##");//format to 2 places
    accbal =  sc.nextDouble();
    System.out.print(df.format(aacbal));//prints double formatted to 2 places

然而我看到你说:

  

尝试谷歌,但无法找到我可以在输入本身格式化,   意味着甚至不让用户输入除了以外的任何小数位数   2个十字架的地方

如果以上是您的意图,无论出于何种原因,只需使用nextLine()读入输入,然后检查以确保小数点后它的长度只有2:

double accbal=0;
Scanner sc = new Scanner(System.in);

while (true) {
    System.out.println("Enter account balance");
    String s = sc.nextLine();

    if (s.substring(s.indexOf('.') + 1).length() <= 2)//accept input and convert to double
    {
        accbal = Double.parseDouble(s);
        break; //terminates while loop
    } else {
        System.out.println("Incorrect input given! Decimal places cant exceed 2");
    }
}
System.out.println("Balance: "+accbal);

答案 1 :(得分:1)

由于显示小数位实际上是最终用户的形式,因此您可以将您的价值改为String并将其转换为DoubleBigDecimal,后者为如果您正在处理实际财务状况,则首选。

相关:What Every Computer Scientist Should Know About Floating-Point Arithmetic

public static void add() {
    BigDecimal accbal; // could declare a Decimal
    Scanner sc = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("#.00");

    System.out.println("Enter account balance");
    accbal = new BigDecimal(sc.nextLine());
    System.out.println(df.format(accbal.doubleValue()));

}

答案 2 :(得分:0)

如果您想接受“#。##”表单的输入,只需为Scanner.hasNext指定自定义正则表达式: - )

final Scanner input = new Scanner(System.in);
final Pattern pattern = Pattern.compile("\\d+\\.\\d{2}?");
while (input.hasNext()) {
  System.out.println((input.hasNext(pattern) ? "good" : "bad")
    + ": " + input.nextDouble());
}

使用以下输入:

2.00
3.14159
2

结果是:(也找到here

good: 2.0
bad: 3.14159
bad: 2.0

这种方式允许您验证他们输入两位小数的金额。


即使您说只想要一个后期处理解决方案,如果您已经有一个金额并希望将其转换为使用2位小数,你专注于精确度(因为这是金钱),也许尝试使用BigDecimal - 特别是,请参阅BigDecimal.setScale

while (input.hasNextBigDecimal()) {
  System.out.println(input.nextBigDecimal().setScale(2, RoundingMode.HALF_UP));
}

output因此:

2.00
3.14
2.00