写一个双号,稍后用Scanner.nextDouble()

时间:2016-03-31 17:50:25

标签: java double java.util.scanner

我必须在文件中写一个Double数字,然后读取该文件和Double,但我有一个ImputMismatchException。我调试了代码,问题是我用来编写文件的PrintWritter,写了一个点的数字,如下所示:12.3。我用来读取该数字的Scanner.nextDouble()会返回ImputMismatchException,如果输入不是这样的:12,3

这是我写的代码:

public void crearVentaNueva(int codigo, double precio, String nombre) throws IOException {
    FileWriter fw = new FileWriter(archivoVentas, true);
    PrintWriter pw = new PrintWriter(fw);

    pw.println(codigo + " dato " + nombre + " dato " + precio + " dato ");

    pw.close();
    fw.close();

    nVentas++;
    ventas.add(new Venta(codigo, precio, nombre));
}

以下是我的阅读代码:

private void leerArchivoVentas() throws IOException {

    int codigo;
    double precio;
    String nombre;

    try {

        FileReader fr = new FileReader(archivoVentas);
        Scanner lector = new Scanner(fr);
        nVentas = 0;
        while (lector.hasNextLine()) {
            nVentas++;
            lector.nextLine();
        }
        lector.close();
        fr.close();

        ventas = new ArrayList<Venta>();

        fr = new FileReader(archivoVentas);
        lector = new Scanner(fr);
        lector.useDelimiter("\\s*dato\\s*");

        for (int i=0; i<nVentas; i++) {

            codigo = lector.nextInt();
            nombre = lector.next();
            precio = lector.nextDouble();

            ventas.add(new Venta(codigo, precio, nombre));

        }

        lector.close();
        fr.close();

    }
    catch(Exception e) {

        FileWriter fw = new FileWriter(archivoVentas);

        ventas = new ArrayList<Venta>();
        nVentas = 0;

        fw.close();

    }

}

我该怎么做才能没有ImputMismatchException并正确读取数字?

这是我的第一篇文章,也许我在语法上犯了一些错误,因为我是西班牙语,我不太会说英语。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

尝试使用正确的区域设置初始化awk -F, -v c1="$first" -v c2="$second" -v c3="$third" 'BEGIN{OFS=FS} {print $c1, $c2, $c3}' "$1" ,以便正确处理点和逗号,如下所示:

Scanner

答案 1 :(得分:2)

您可以使用重载的String.format方法并指定适当的区域设置,如:

String.format(Locale.FRANCE, "%.2f", someDouble);