Java:(int)(float)Float.valueOf(s)或Float.valueOf(s).toInt()

时间:2011-05-13 00:28:19

标签: java casting

我刚刚碰到这个小问题,我想要其他人的输入

我在徘徊将String转换为int

的最佳解决方案
(int)(float)Float.valueOf(s) 

Float.valueOf(s).toInt()

s是从文本字段输入的字符串,所以我无法保证它必然是一个int

我的直觉是双重演员是丑陋的,应该避免

您的意见?

4 个答案:

答案 0 :(得分:7)

您的要求不明确:

  • 如果您期望一个整数,并且不希望允许用户输入带小数点的数字,只需使用Integer.valueOf(String)Integer.parseInt(String)并抓住{{ 1}}。

  • 如果您想允许带小数点的数字,请使用NumberFormatExceptionFloat.valueOf(String)

    • 如果您只是想将Float.parseFloat(String)截断为float,那么int或两个演员阵容都是等效的。 (Float.intValue()的javadoc明确说明了这一点。)

    • 如果您要舍入到最近的intValue,请使用int代替演员。

你应该抓住Math.round()你采取的任何方法,因为用户可以输入的垃圾不是有效的10号基数(有或没有小数点)......或超过数字的界限类型。

(我想你可以在尝试转换它之前使用正则表达式或其他东西来检查字符串,但是让异常发生并处理它更简单。异常效率问题不太可能是实际问题在这个用例中。)


关于NumberFormatException是否比两个演员更好的原始问题:这是一个风格问题。根据javadoc,这两种方法做同样的事情。一个人可能比另一个人的效率略高,但是:

  1. 不应该关注您的用例,
  2. 唯一可以确定的方法就是在你的执行平台上描述两种选择......坦白说,这不值得付出努力。

答案 1 :(得分:1)

您应该使用Integer.valueOf(..),并捕获NumberFormatException(如果字符串无法解析为整数)。

答案 2 :(得分:0)

Integer.parseInt(string)最好

int x = Integer.parseInt(s);

最好在调用之前检查字符串是否为int。

答案 3 :(得分:0)

正如其他人指出的那样,它只是风格而非性能......但如果你担心性能,你应该使用正则表达式通过javascript验证浏览器本身的文本字段数据

^[0-9]*$

只允许将整数提交到后端代码,从而避免一次网络访问,从而提高性能。你应该在后端验证数据,因为你可以使用

Integer.parseInt(String s) throws NumberFormatException