【问题标题】:Can a Double be formatted without scientific notation?可以在没有科学记数法的情况下格式化 Double 吗?
【发布时间】:2011-02-16 15:19:23
【问题描述】:

我知道关于同一问题的各种帖子。

我的有点不同,可能有点明显,但我需要你的 cmets。

我目前正在使用 Hibernate SearchLucene 来索引实体属性。

我的实体上有一堆 Double 属性。

这些实体使用来自 Lucene 的默认桥(桥,即负责转换 LongToStringStringToLong 的实体)一旦开始使用科学计数法。

我正在尝试在 DataTables 上显示 .xhtml 贷方和借方金额,它们的长度可以长达 18 位,并且它们的数据库 ( DB2) 类型是 BIGINT

  1. 我无法更改数据库类型 以 Long 为例。
  2. 我无法更改 Double 我的实体的类型属性 要么到例如 Long

那么问题是什么? 有没有办法从字符串中说“1234567890”来检索格式为 1234567890 而不是 1.23456789E9 的 Double,因为它默认由 Double.parseDouble(FormattedString) 完成?

PD:我知道 DecimalFormat 的存在,但是考虑到使用这个格式化程序会给我一个正确格式化的字符串说:“#######.E0”但是什么我真正需要的是具有这种格式的 Double,但是在执行 Double.parseDouble(FormattedString) 时,我会失去这种格式。

希望我说的很清楚,感谢您的帮助。

【问题讨论】:

  • 在打印前将其投射到很长时间?
  • 不能在 上的迭代中动态完成吗

标签: java string double hibernate-search


【解决方案1】:

有没有办法从字符串中说“1234567890”来检索值为 1234567890 而不是 1.23456789E9 的 Double,因为它默认由 Double.parseDouble(FormattedString) 完成?

你的问题真的没有意义。 1234567890 与 1.23456789E9 的值相同,双精度表示其中之一,当且仅当它也代表另一个。

我知道 DecimalFormat 的存在,但是考虑到使用这个格式化程序会给我一个正确格式化的字符串说:“#######.E0”但我真正需要的是一个 Double使用这种格式,但是在执行 Double.parseDouble(FormatedString) 时,我会丢失这种格式。

不,没有办法构造一个Double 以便它以某种方式显示。 DoubletoString 方法就是这样,不能更改。

您唯一能做的就是例如使用DecimalFormatString.format,但正如您所指出的,您最终会得到String

【讨论】:

  • 我希望你的意思是parseDouble 而不是toString?所以你真正的意思是parseDouble 是它的本质并且不能改变??
  • 不,我的意思是toString(在大多数情况下定义双精度如何打印的方法)。
  • 是的,我的错,我认为以某种方式可以更改双数的格式,但正如您所说的那样,这是不可能的。一位同事提供的解决方案是在我的 .xhtml 上的 <h:outputText> 上应用 formatter 属性此外,我编辑了问题的第一部分以使其更清晰。您能否确认一下 Double 类型的属性是否无法更改其格式?
  • 您无法更改double 的默认格式,但是您可以编写自己的代码以从double 生成String 或从double 以任何方式生成double希望。
【解决方案2】:

对 Lucene 一无所知,但您永远不能在 .xhtml 文档中包含 Double,它始终是字符串。 Double 没有 Format,只有 Double 的 String 表示。

【讨论】:

  • 你是对的,我忘了提到这些双打是如何显示的。我有一个 迭代具有不同属性的实体列表,我在这里提到的 Double 类型属性。因此忽略 .xhtml 部分并检查我的真正问题 那么问题是什么 谢谢
【解决方案3】:

所以我终于找到了解决问题的方法。 在总结了 aioobeJens Schauder 所说的话。我可以使用以下标记在我的 .xhtml 上动态格式化文本:

<h:outputText value="#{recordTable[column.property]}"
              rendered="#{column.header ne 'Details' and
                          column.header eq ('Total Credit Amount' or
                                            'Total Debit Amount')}">
              <f:convertNumber pattern="########"/>
</h:outputText>

感谢您向我阐明我模糊的这些基本内容:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多