java如何处理E后面没有指数值的指数值异常
这是我在这个论坛上提出的第一个问题,所以如果问题是新手,请给出建议
我通过EditText
接收用户输入,因此它是一个字符序列/字符串。然后我创建了BigDecimal
来保存这个值。它处理指数也优雅,没有任何麻烦。但问题是,当用户输入像1.1E+
(没有任何后续指数)这样的值时,代码在这段代码中崩溃。但是当输入是这样的1.1E+2
EditText edit_text_left;
Editable editable_val_text;
....
editable_val_text = edit_text_left.getText();
BigDecimal val = new BigDecimal((editable_val_text.toString().trim())); // crash happens here
如何处理
更多信息:你可以在谷歌单位转换应用程序中尝试,选择数字存储:PB到比特转换。输入9字节,它将在bits部分显示8.106e+16
。现在尝试编辑8.106e+16
到8.106e+
,它仍然可以工作。我只想要类似的处理
# 1 楼答案
根据Javadoc的BigDecimal
IMHO你能做的是记住最后输入的指数,然后如果发生异常,如果需要这种行为,追加最后一个指数
# 2 楼答案
在我看来,你应该做的是捕捉异常(在一个包含try-catch语句中),并告诉用户他们提供了一个无效的数字
如果想要处理非标准版本的“科学”格式,可能需要实现自己的数字解析器/转换器。可以通过从BigDecimal类中获取标准解析代码,并将其转换为理解非标准格式的静态帮助器方法来实现这一点
或者,您可以尝试创建与非标准表单匹配的正则表达式,并使用该正则表达式将字符串更正为
BigDecimal
可以接受的表单但坦率地说,我不会这么做。如果用户能够理解科学的格式,他们也应该能够获得正确的语法
# 3 楼答案
感谢这个社区和所有回复的人。其中一个暗示给了我解决这个问题的想法。没有内置的方法来处理结尾的e/e/e-/e-/e+/e+/e+。相反,我利用了绳子。endsWith方法来识别孤独的e/e/e-/e-/e+/e+,并从字符串中删除它们