小编Chi*_*inz的帖子

DecimalFormat:无前导零,无指数,可变精度

我正在Oracle DB与 JDBC 一起使用。我必须选择一些值并将它们写入文件。

首先我使用ResultSet#getString它给了我几乎所有按需要格式化的值,除了有时数字用指数表示。例如:0.0897234E-4

为了摆脱指数,我检查了当前列的类型是否为 NUMERIC,然后用于ResultSet#getBigDecimal获取 BigDecimal。我这样做是因为 DB 中存储了各种 Java 数字类型,而且 Oracle DB 仅提供 NUMERIC 作为数字类型,我必须使用 BigDecimal,因为每个数字 Java 类型都可以存储在 BigDecimal 中。
然后我用这个BigDecimal#toPlainString方法有效地摆脱了指数。

if (rset.getMetaData().getColumnType(i) == java.sql.Types.NUMERIC) {
    value = (rset.getBigDecimal(i) != null rset.getBigDecimal(i).toPlainString() : "0");
}
Run Code Online (Sandbox Code Playgroud)

下一个问题是,当数字低于 1 时,我得到了一个前导零,但我不想要它们。

  • .007346 <-- 需要之前
  • 0.007346
  • -.4352 <-- 需要之前
  • -0.4352

为了解决这个问题,我在互联网上搜索并找到了这DecimalFormat门课。然后我能够格式化数字,以便我没有以下格式的前导零:

new DecimalFormat("#.");
Run Code Online (Sandbox Code Playgroud)

但这当然没有在小数点后显示任何数字,而是在每个数字后添加一个小数点。例如:1235. -65.

所以我想要的是,如果数字是十进制,那么应该有尽可能多的数字(实际上是 38,我认为在 Oracle DB 中是最大值)。永远不应该有指数,如果数字低于 1,则不应有前导零。如果数字是自然数,则末尾不应有小数点。

所需格式的一些示例: 9873478 -1349 .743803 -.004726

我怎样才能实现这样的表示?欢迎任何解决方案,我不必使用 DecimalFormat。解决方案可能是,我必须在通过尝试将数字转换为不同的 …

java

4
推荐指数
1
解决办法
1378
查看次数

阻止在 Enter 上提交,但允许在 TextArea 中输入换行符

是否可以阻止回车键提交表单,但允许回车键在输入中工作。(例如textArea换行符)?

到目前为止我尝试过:

  • e.preventDefault()
  • e.stopPropagation()

两者都在表单标签上onkeyup="if (e.keyCode == 13))"

这确实阻止了通过 Enter 键提交表单,但它也阻止了 Enter 键完全在表单字段内工作。我想要实现的是,当我在 TextArea 中按 Enter 键时,它会创建一个 newLine ,但是当我在 a 中按 Enter 键时input type="text",它不会提交表单。

使用 JSF 2.3

JQuery 解决方案也可以。

html javascript jquery jsf

3
推荐指数
1
解决办法
4771
查看次数

标签 统计

html ×1

java ×1

javascript ×1

jquery ×1

jsf ×1