Java字符串要双重转换

时间:2010-06-01 14:19:33

标签: java jdbc double

我一直在网上阅读有关在java中处理floatdouble类型的问题。不幸的是,图像仍然不清楚。因此,我在这里直接问。 :(

我的MySQL表有各种DECIMAL(m,d)列。 m的范围可以是5到30. d保持不变为2。

问题1。

我应该在Java中使用什么等效的数据类型来处理(即存储,检索和处理)表格中值的大小? (我已经双了 - 所以这个帖子。)

问题2。

在尝试从字符串中解析double时,我遇到了错误

Double dpu = new Double(dpuField.getText());

例如 -

"1" -> java.lang.NumberFormatException: empty String
"10" -> 1.0
"101" -> 10.0
"101." -> 101.0
"101.1" -> 101.0
"101.19" -> 101.1

我做错了什么?将字符串转换为double值的正确方法是什么? 我应该采取什么措施来对这些价值观进行操作?

修改

这是代码 -

    System.out.println(dpuField.getText());
    Double dpu = new Double(dpuField.getText());
    System.out.println(dpu);

是的,问题在于getText()报告dpuField的错误值。 在JTextField keyTyped事件上调用此方法。那么这里出了什么问题?

编辑2

看: http://journals.ecs.soton.ac.uk/java/tutorial/post1.0/ui/keylistener.html 显然,keyTyped()没有给我键码。我必须切换到keyRealeased()

4 个答案:

答案 0 :(得分:5)

  

我应该在Java中使用什么等效数据类型来工作(即存储,检索和处理)与表中值的大小? (我已经以双重结算了 - 因此这篇文章)。

由于它是DECIMAL字段,您应该prefer java.math.BigDecimal。您可以使用PreparedStatement#setBigDecimal()将其存储在数据库中,然后使用ResultSet#getBigDecimal()从数据库中检索它。

  

在尝试从字符串中解析double时,我遇到错误

这不可能是真的。问题出在其他地方。也许它只是没有返回您希望返回的数据,或者您没有使用/调试您期望的值。

答案 1 :(得分:4)

  1. 如果您需要精确的精度而没有舍入错误,则应使用BigDecimal

  2. 您的代码看起来不错 - 可能是dpuField.getText()以某种方式从上面列出的字符串值中删除了最后一个字符吗?

  3. 更新:您说

      

    是的,问题在于getText()报告dpuField的错误值。在JTextField keyTyped事件上调用此方法。

    可能是getText()在实际附加了最后一个键入的键之前返回字段的值吗?

答案 2 :(得分:1)

对于十进制,我相信如果你不在Java端使用BigDecimal,你可能会失去精度,因为一些小数部分不能存储为二进制分数。

首选Double.valueOf(String)构造函数,但这是一种有效的方法。还有其他事情必须继续(即我怀疑那些是你传入的实际字符串值)。

答案 3 :(得分:1)

问题1:将DECIMAL列映射到Double是个坏主意,通常BigDecimal是正确的类型。 http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/mapping.html#1055175

问题2:你做错了什么;在转换之前打印String值。