【问题标题】:Why zero absent when convert float numbers (which are between 0 and 1) to string将浮点数(介于 0 和 1 之间)转换为字符串时为什么不存在零
【发布时间】:2017-07-23 01:03:05
【问题描述】:

在 Oracle 数据库中,我将数字 0.5 存储在格式为 number(17, 2) 的列中。 我使用 Java 程序(使用 mybatis)读取它,并将其存储为实体对象的字符串字段。这个字符串字段的值是“.5”,而不是我期望的“0.5”。

我知道“.5”是浮点数的标准表示,在大多数编程语言中可以直接转换为数字 0.5。但是当它显示在网页上时,这不是我想要的。当然,只要检查第一个字母是否为“.”,我就可以随时转换为“0.5”,我认为这很简单而且容易忘记。

我还可以使用 Oracle 函数来指定将数字转换为字符串的格式。但是 TO_CHAR() 函数以格式模式作为参数使输出字符串为固定长度,或者不带格式参数将 0.5 打印为“.5”。这两种行为都不是我想要的。我只想要一种“原样”的方式来转换数字。但是 oracle 的“as it”方式并不是我想要的。

所以我想问一下:

处理这个问题的更好方法是什么?

【问题讨论】:

  • 你用什么Java程序读过它?并将其存储为实体对象的字符串字段如何?为什么?它应该是 double 或更可能是 BigDecimal
  • @EJP 是的,最后我们将它存储为 BigDecimal。还有,如何选择评论作为最佳答案?

标签: java oracle floating-point


【解决方案1】:

但是我不熟悉mybatis, 你不能把它读成double 然后格式化它,例如带十进制格式器?

DecimalFormat df = new DecimalFormat("0.00"); df.format(number);

【讨论】:

    【解决方案2】:

    您不应将数字的值与其表示混淆。

    0.5.5<sup>1</sup>/<sub>2</sub>, 2<sup>-1</sup>, <sup>334</sup>/<sub>668</sub>, 0.1<sub>2</sub> and 0000000.50000000000都是完全相同的值。

    如果您希望以某种方式格式化该值,则需要在将值转换为字符串时指定该值。

    【讨论】:

    • 我要问的是,在将值从源转换为字符串时如何指定格式(对于这种情况,Oracle 数据库或 mybatis,因为是 Oracle 或 mybatis 提供了转换的东西)
    猜你喜欢
    • 1970-01-01
    • 2016-02-25
    • 2022-09-29
    • 2011-11-25
    • 2019-04-16
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多