我正在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。解决方案可能是,我必须在通过尝试将数字转换为不同的 …
是否可以阻止回车键提交表单,但允许回车键在输入中工作。(例如textArea换行符)?
到目前为止我尝试过:
e.preventDefault()e.stopPropagation()两者都在表单标签上onkeyup="if (e.keyCode == 13))"
这确实阻止了通过 Enter 键提交表单,但它也阻止了 Enter 键完全在表单字段内工作。我想要实现的是,当我在 TextArea 中按 Enter 键时,它会创建一个 newLine ,但是当我在 a 中按 Enter 键时input type="text",它不会提交表单。
使用 JSF 2.3
JQuery 解决方案也可以。