当字符串包含"e"Java 时将字符串转换为 bigDecimal



注意:当我还是Java编程新手时,我就问过这个问题。我有同样的解决方案;当时本身。编辑以使其他读者清楚。

输入格式:输入为字符串格式。在我们的例子中,我们假设将仅包含数字的字符串转换为 BigDecimal,其余的可以忽略。

例如:我们期望1e4 -> BigDecimal 值作为"10000"传递。因此,输入 包含字母或任何其他特殊字符可以忽略进行转换。

需求原因:我们需要根据搜索文本搜索数据库中的几列,并根据匹配条件检索行。假设列名称(VarChar列),价格(十进制列),类型(VarChar列)。因此,如果搜索文本可以转换为 BigDecimal 我们将搜索文本是否与其他任何列匹配,如果无法转换为 BigDecimal 我们将搜索文本是否与其他两列匹配。


在没有进一步分析输入的情况下,我盲目地将搜索文本转换为 BigDecimal。

示例:如果数据库中的名称为 1e3,价格为 10000,如果搜索文本为 1e4,则转换后的 BigDecimal 值 1e4 将与 10000 匹配并获取行。

转换为 BigDecimal 的初始代码:

BigDecimal textToBigDecimal = null;
try
{
textToBigDecimal = new BigDecimal(searchText);
}
catch (NumberFormatException ignored)
{
}
if (textToBigDecimal == null)
{
//criteria handling code.
}
else
{
//criteria handling code.
}

跳过了条件构造的代码。添加了 try-catch,因为输入也可以是纯字符串。基于该标准,构造有所不同。

修改后的代码:

BigDecimal textToBigDecimal = null;
try
{
if (!searchText.contains("e") && !searchText.contains("E"))
{
textToBigDecimal = new BigDecimal(searchText);
}
}
catch (NumberFormatException ignored)
{
}
if (textToBigDecimal == null)
{
//criteria handling code.
}
else
{
//criteria handling code.
}

注意:如果有任何疑问,请对问题发表评论。我已经发布了这个问题,希望找到一个默认的java方法,该方法仅将仅包含数字的字符串转换为BigDecimal 并为其余字符串抛出异常。

如果你想为像'45e57'这样的字符串抛出异常,你可以在构造BigDecimal之前使用例如Long.parseLong("43e57")。它会抛出NumberFormatException

最新更新