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

标签 java casting

我刚刚遇到了这个小问题,我希望其他人对此提出意见

我想知道将 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,这两种方法做同样的事情。一个可能比另一个更有效率,但是:

  1. 这不应该成为您的用例的问题,并且
  2. 唯一确定的方法是在您的执行平台上分析两种替代方案......坦率地说,这不值得付出努力。

关于Java:(int)(float)Float.valueOf(s) 或 Float.valueOf(s).toInt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986034/

相关文章:

java - 下载的位图在添加到 ImageView 时会失去透明度

java - 无法将空字符串设置为 thymeleaf 中的属性值

java - 对泛型方法中的 Cast List 感到困惑?

c++ - 如何在 C++ 中删除与 typeid( ).name( ) 关联的数字?

java - 如何使用 MigLayout 将 JLabels 与 JPanel 上的一条线连接起来?

java - 尽管添加了 JavaFX 插件,Gradle 项目仍无法找到 JavaFX 应用程序类

c++ - 在 C++ 中使用 istringstream 进行字符串到双重转换的意外结果

从 uint16_t 转换并转换为 int16_t

c++ - 有没有办法通过引用模拟向下转换

java - 如何在 Jspinner 中制作时间格式?