导致问题的java中从oracle到字符串的数字

导致问题的java中从oracle到字符串的数字,java,oracle,Java,Oracle,在一个带有数字数据类型的表中,我存储了0.4 String colLabel = rsMetadata.getColumnLabel(i); recordMap.put(colLabel.toLowerCase(), rs.getString(colLabel)); 我使用rs.getString获取数据 但在java中,我得到的是4.00000000000000022204460492503130808473E-01 我该怎么

在一个带有数字数据类型的表中,我存储了0.4

    String colLabel = rsMetadata.getColumnLabel(i);                         
    recordMap.put(colLabel.toLowerCase(), rs.getString(colLabel));
我使用rs.getString获取数据

但在java中,我得到的是4.00000000000000022204460492503130808473E-01


我该怎么办呢。这是一个通用代码,每次使用rs.getString时,相应类型的getter方法都会检索每列中的值。因此,您必须使用resultSet的rs.getFloat(),这是推荐的。使用getString获取所有值非常有用,但也有其局限性。在您的例子中,它用于检索数值类型,getString将数值转换为Java字符串对象,并且不能保证它是列中值的字符串表示形式

适当类型的getter方法检索每个列中的值。因此,您必须使用resultSet的rs.getFloat(),这是推荐的。使用getString获取所有值非常有用,但也有其局限性。在您的例子中,它用于检索数值类型,getString将数值转换为Java字符串对象,并且不能保证它是列中值的字符串表示形式

解决方法是

String colLabel = rsMetadata.getColumnLabel(i);                         
recordMap.put(colLabel.toLowerCase(), String.valueOf(Double.parseDouble(rs.getString(colLabel))));
演示:

public class Main {
    public static void main(String[] args) {
        System.out.println(String.valueOf(Double.parseDouble("4.00000000000000022204460492503130808473E-01")));
    }
}
0.4
输出:

public class Main {
    public static void main(String[] args) {
        System.out.println(String.valueOf(Double.parseDouble("4.00000000000000022204460492503130808473E-01")));
    }
}
0.4
解决办法是

String colLabel = rsMetadata.getColumnLabel(i);                         
recordMap.put(colLabel.toLowerCase(), String.valueOf(Double.parseDouble(rs.getString(colLabel))));
演示:

public class Main {
    public static void main(String[] args) {
        System.out.println(String.valueOf(Double.parseDouble("4.00000000000000022204460492503130808473E-01")));
    }
}
0.4
输出:

public class Main {
    public static void main(String[] args) {
        System.out.println(String.valueOf(Double.parseDouble("4.00000000000000022204460492503130808473E-01")));
    }
}
0.4

一种可能的方法是:,基本上您确定数据类型,然后使用getString或getBigDecimal或相关方法。列是数字,它只是选择列_name@TomJava-有更新吗?这些答案对你有用吗?谢谢你,阿拉文。我遵循了一个类似的原则approach@TomJava-不客气。祝你成功!一种可能的方法是:,基本上您确定数据类型,然后使用getString或getBigDecimal或相关方法。列是数字,它只是选择列_name@TomJava-有更新吗?这些答案对你有用吗?谢谢你,阿拉文。我遵循了一个类似的原则approach@TomJava-不客气。祝你成功!