Java 转换字符串时出现问题->;浮动->;一串

Java 转换字符串时出现问题->;浮动->;一串,java,swing,Java,Swing,我有一个JTable,在其中输入一些值。这是一个侦听器函数,用于了解是否对值进行了任何更改,以便我可以更新它们。值必须具有指定的格式(#.#####),因此,如果客户端输入的值超过3,我将对浮点值进行四舍五入,将其四舍五入到小数点后3位 private class CambioTablaPretratamientoListener implements TableModelListener{ public void tableChanged(TableModelEvent e){

我有一个JTable,在其中输入一些值。这是一个侦听器函数,用于了解是否对值进行了任何更改,以便我可以更新它们。值必须具有指定的格式(#.#####),因此,如果客户端输入的值超过3,我将对浮点值进行四舍五入,将其四舍五入到小数点后3位

    private class CambioTablaPretratamientoListener implements TableModelListener{
    public void tableChanged(TableModelEvent e){
        try{
            if(enviarDatosADispositivo){
                TableModel model = (TableModel)e.getSource();
                float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));
                DecimalFormat dec = new DecimalFormat("#.###");
                String aux = dec.format(value);
                if(model.getValueAt(e.getLastRow(), 1).equals(aux))
                    return;
                else
                    model.setValueAt(aux, e.getLastRow(), 1);
                value = Float.parseFloat(aux);

                String nombreAtributo = (String)model.getValueAt(e.getLastRow(), 0);

                nodoAModificar.setPretratamientUserParameter(nombreAtributo, value);     
            }
        }catch(BusinessException ex){
            ex.printStackTrace();
        }
    }
}
代码一开始似乎是有效的,因为它是四舍五入的,数字出现在表中,但值没有得到更新。我猜我的DecimalFormat有问题,因为如果我像这样离开函数,它会工作:

    private class CambioTablaPretratamientoListener implements TableModelListener{
    public void tableChanged(TableModelEvent e){
        try{
            if(enviarDatosADispositivo){
                TableModel model = (TableModel)e.getSource();
                float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));
                String nombreAtributo = (String)model.getValueAt(e.getLastRow(), 0);

                nodoAModificar.setPretratamientUserParameter(nombreAtributo, value);     
            }
        }catch(BusinessException ex){
            ex.printStackTrace();
        }
    }
}

最后

您似乎认为,将浮点数转换为字符串,然后再转换回来,可以使其具有一定数量的小数位数。这是错误的。FP值没有任何小数位。它们有两个位置。如果小数部分是2的负幂,则这些数字只对应于固定的小数位数,例如0.5、0.125、0.0625等。

如果使用BigDecimal,您实际上可以截断数字,而不是尝试使用Float(缺乏)精度。

相反,将您的应用为a。

我知道如何从二进制位生成FP,但如果我通过字符串转换将其舍入,我不明白为什么它不应该工作。不管怎样,我怎么能用不同的方式来做呢?@Roman Rdgz这很奇怪,因为我刚刚告诉过你为什么它不起作用。@Roman Rdgz只适用于某些值。由于给出的原因,它不可能对所有的值都有效。这意味着代码会有很大的变化,因为这是我从以前的程序员那里继承下来的一个老项目。我不能把它修好,让它和浮子一起运行吗?