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

Jas*_*ers 0 java casting

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

我正在徘徊将String转换为int的最佳解决方案

(int)(float)Float.valueOf(s) 
Run Code Online (Sandbox Code Playgroud)

要么

Float.valueOf(s).toInt()
Run Code Online (Sandbox Code Playgroud)

s是从文本字段输入的字符串,因此我不能保证它必然是int

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

你的意见?

Ste*_*n C 7

您的要求不清楚:

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

  • 如果要允许带小数点的数字,请使用Float.valueOf(String)Float.parseFloat(String).

    • 如果你只是想截断float到a,int则两个Float.intValue()或两个强制转换是等价的.(javadoc intValue明确说明了这一点.)

    • 如果要舍入到最近int,请使用Math.round()而不是强制转换.

您应该捕获NumberFormatException您采取的任何方法,因为用户可能输入的垃圾不是有效的基数为10的数字(有或没有小数点)......或者超出数字类型的界限.

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


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

  1. 这不应该是你的用例的问题,并且
  2. 确切知道的唯一方法是在你的执行平台上描述两个替代方案......坦率地说,这是不值得的.