注意:当我是java编程的新手时,我问过这个问题。我有同样的解决方案;那时候自己。编辑以便其他读者清楚。
输入格式:输入为字符串格式。在我们的例子中,我们假设将仅包含数字的字符串转换为BigDecimal,其余部分可以忽略。
例如:我们希望 1e4 - > BigDecimal值将作为“10000”传递。那么,输入哪个 包含字母或任何其他特殊字符都可以忽略转换。
需求原因:我们需要根据搜索文本搜索数据库中的少数几列,并根据匹配条件检索行。让我们说列名(VarChar列),价格(十进制列),类型(VarChar列)。因此,如果搜索文本可以转换为BigDecimal,我们将搜索文本是否匹配任何其他列,如果它不能转换为BigDecimal,我们将搜索文本是否匹配其他两列。
在不进一步分析输入的情况下,我盲目地将搜索文本转换为BigDecimal。
示例:如果DB中的名称是1e3且price是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,并为其余的字符串抛出异常。
答案 0 :(得分:0)
如果您希望为'45e57'
之类的字符串抛出异常,则可以在构造Long.parseLong("43e57")
之前使用BigDecimal
。它将抛出NumberFormatException