按用户输入指定精确的小数位数,Java

按用户输入指定精确的小数位数,Java,java,input,decimal,formatter,Java,Input,Decimal,Formatter,我正在编写一个计算器程序,其中用户在最后一个输入提示中写入小数点的数量(1,2,3…),例如,2个数字的总和的输出应该具有小数点的数量 import java.util.Scanner; import java.util.Formatter; public class Lab01 { public void start(String[] args) { double cislo1; double cislo2; int operaci

我正在编写一个计算器程序,其中用户在最后一个输入提示中写入小数点的数量(1,2,3…),例如,2个数字的总和的输出应该具有小数点的数量

import java.util.Scanner;
import java.util.Formatter;

public class Lab01 {

    public void start(String[] args) {

        double cislo1;
        double cislo2;
        int operacia;
        String decimal;
        String dec;

        Scanner op = new Scanner(System.in);
        System.out.println("Select operation (1-sum, 2-dev, 3- *, 4- / )");
        operacia = op.nextInt();
        if (operacia >= 1 && operacia <= 4) {
            if(operacia == 1) {
                Scanner input = new Scanner(System.in);
                System.out.println("Enter number one:");
                cislo1=input.nextDouble();
                System.out.println("Enter number two:");
                cislo2=input.nextDouble();

                System.out.println("Enter number of decimal points");
                decimal=input.nextLine();

                dec="%."+decimal+"f";

                Formatter fmt = new Formatter();
                fmt.format(dec, cislo2);
                System.out.println( fmt);
             }
         } else {
             System.out.println("wrong!");
         }
     }
 }

您的变量
decimal
应该是一个int。因此您应该更改以下行:

String decimal;
您应更改为:

int decimal;
decimal = input.nextInt();
以及:

您应更改为:

int decimal;
decimal = input.nextInt();

或者,如果希望将其保留为字符串,可以添加额外的
input.nextLine()读取小数位数之前。之所以会发生这种情况,是因为nextLine()使用了您正在读取
cislo2
变量的行分隔符,
nextInt()
将只读取一个int。

。你能发布一个可复制的例子吗?你参加了垂直空间奖吗?请合理设置代码格式。我尝试了第一种解决方案,但尽管“decimal”变量后面有数字,但它总是将小数点舍入6。即使我把它设为1,你说的“小数点后的数字”和“将点舍入6”是什么意思?输入和输出是什么?如果在控制台中出现提示时将“decimal=input.nextInt();”设置为1,“cislo2”为3.412444124,则输出将为3.412444,带有6个小数点。如果我将“decimal=input.nextInt();”设置为50,则输出将再次为3.412444,带有6个小数点。您确定没有更改任何其他内容吗?因为它对我有用。除此之外,我认为如果你想在你的方法中求和,你应该添加fmt.format(dec,cislo1+cislo2),因为你的formatterMistake的参数在我这边。非常感谢您的帮助,它现在正在工作:)