我刚刚遇到了这个小问题,我希望其他人对此提出意见
我想知道将 String 转换为 int 的最佳解决方案是什么
(int)(float)Float.valueOf(s)
或
Float.valueOf(s).toInt()
s 是从文本字段输入的字符串,所以我不能保证它一定是 int
我的直觉是双重 Actor 很丑陋,应该避免
您的意见?
最佳答案
您的要求不清楚:
如果您需要一个整数并且不希望用户输入带小数点的数字,只需使用
Integer.valueOf(String)
或Integer.parseInt(String)
并捕获NumberFormatException
。如果您希望允许带有小数点的数字,请使用
Float.valueOf(String)
或Float.parseFloat(String)
。如果您只是想将
float
截断为int
,则Float.intValue()
或两次强制转换是等效的。 (intValue
的 javadoc 明确说明了这一点。)如果您想舍入到最接近的
int
,请使用Math.round()
而不是强制转换。
无论你采取什么方法,你都应该捕获 NumberFormatException
,因为用户可能输入不是有效的 10 进制数字(带或不带小数点)的垃圾......或者超出界限数字类型。
(我想你可以在尝试转换字符串之前使用正则表达式或其他东西来检查它,但是让异常发生并处理它更简单。异常效率问题不太可能成为实际问题在这个用例中。)
<小时/>关于您最初的问题,即 intValue()
是否比两次转换更好:这是一个风格问题。根据javadoc,这两种方法做同样的事情。一个可能比另一个更有效率,但是:
- 这不应该成为您的用例的问题,并且
- 唯一确定的方法是在您的执行平台上分析两种替代方案......坦率地说,这不值得付出努力。
关于Java:(int)(float)Float.valueOf(s) 或 Float.valueOf(s).toInt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986034/