我试图让用户自由地输入他自己风格的数字,就像他可以选择输入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
}
答案 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
并将其转换为Double
或BigDecimal
,后者为如果您正在处理实际财务状况,则首选。
相关: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