2017-04-11 273 views
-3

当我尝试使用BigDecimal()将字符串转换为BigDecimal时,对于像'45e57'这样的字符串转换为4.5E + 57。当字符串包含'e'时,将字符串转换为BigDecimal Java

//假设“文本”是一个输入

BigDecimal textToBigDecimal = null; 
try 
{ 
    if (!textToBigDecimal.contains("e") && !textToBigDecimal.contains("E")) 
    { 
     textToBigDecimal = new BigDecimal(text); 
    } 
} 
catch (NumberFormatException ignored) 
{ 
} 

截至如果“文本”包含“E”现在我抛出错误。我想知道是否有解决方法跳过检查。如果转换不应该发生的字符串中存在任何其他字符,则只需要将字符串转换为数字。

+2

我不明白,这是什么问题?你能分享你的代码和你得到的所有异常的完整堆栈跟踪吗? – BackSlash

+1

目前还不清楚你在问什么 - 特别是,“但我不会抛出异常”,你的意思是*你想*抛出一个异常,或者你想抛出一个异常*而不是*抛出异常。 [mcve]会让你更容易帮助你。 –

+0

'新的BigDecimal(“45e57”)'将转换为'4.5E + 58'这是正确的!你想防止什么?要实现什么? – Harmlezz

回答

0

如果想引发异常的字符串像'45e57',你可以构建BigDecimal之前使用例如Long.parseLong("43e57")。它会扔NumberFormatException

+1

为什么试着抓住,如果你可以检查给定的字符串内是否有'e'? – BackSlash

+0

我们不知道这些字符串值是否包含除“e”之外的其他内容。但是这个问题需要更详细的描述:我们有什么样的字符串值等 – Lennier

+0

是的,但对于其他所有的'BigDecimal'本身都会引发异常。 'long'和'BigDecimal'之间唯一的区别是'long'在'BigDecimal'时不接受'E',所以在这种情况下检查'E'就好了。 – BackSlash