当字符串包含';e';JAVA
注意:当我还是java编程新手时,我问过这个问题。我已经得到了同样的解决方案;那时候它自己。编辑以使其他读者明白 输入格式:输入为字符串格式。在我们的例子中,我们假设将只包含数字的字符串转换为BigDecimal,其余的可以忽略 例如:我们希望1e4->BigDecimal值被传递为“10000”。那么,输入 包含字母或任何其他特殊字符,可以忽略以进行转换 要求的原因:我们需要根据搜索文本搜索数据库中的几个列,并根据匹配条件检索行。比如列名称(VarChar列)、价格(十进制列)、类型(VarChar列)。因此,如果搜索文本可以转换为BigDecimal,我们将搜索文本是否匹配任何列;如果无法转换为BigDecimal,我们将搜索文本是否匹配其他两列当字符串包含';e';JAVA,java,bigdecimal,Java,Bigdecimal,注意:当我还是java编程新手时,我问过这个问题。我已经得到了同样的解决方案;那时候它自己。编辑以使其他读者明白 输入格式:输入为字符串格式。在我们的例子中,我们假设将只包含数字的字符串转换为BigDecimal,其余的可以忽略 例如:我们希望1e4->BigDecimal值被传递为“10000”。那么,输入 包含字母或任何其他特殊字符,可以忽略以进行转换 要求的原因:我们需要根据搜索文本搜索数据库中的几个列,并根据匹配条件检索行。比如列名称(VarChar列)、价格(十进制列)、类型(VarC
没有进一步分析输入,我盲目地将搜索文本转换为BigDecimal 示例:如果DB中的名称为1e3,价格为10000,如果搜索文本为1e4,则转换后的1e4的BigDecimal值将匹配到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'
这样的字符串抛出异常,您可以使用例如Long.parseLong(“43e57”)
在构造BigDecimal
之前。它会抛出NumberFormatException
我不明白,是什么问题?你能分享你的代码和你得到的所有异常的完整堆栈跟踪吗?不清楚你在问什么——特别是“但是我不会抛出异常”你的意思是你想抛出异常,还是你不想抛出异常?A将使您更容易获得帮助。新的BigDecimal(“45e57”)
将转换为4.5E+58
,这是正确的!你想预防什么?要实现什么?我不想将45e57转换为4.5E+58。相反,抛出错误。@Finnismissing这背后的逻辑是什么?我的意思是,如果发现与number和point不同的内容,则应引发异常?如果您只需检查给定字符串中是否存在e
,为什么要尝试捕获?我们不知道这些字符串值是否包含除e
之外的其他内容。但问题需要更详细的描述:我们有什么样的字符串值etcTrue,但对于其他所有内容,BigDecimal
本身会引发异常。long
和BigDecimal
之间唯一的区别是long
不接受E
,而BigDecimal
接受,因此在这种情况下,检查E
就可以了。有些值可能是十进制值。所以,我不能使用Long。正如@backslax所说,您可以简单地使用来检查字符串值