Java将浮点数转换为整数

14
我想要进行这样一个操作:如果给定的浮点数像1.0,2.0,3.0这样,我想将它们保存为整数(1、2、3),如果它们像1.1,2.1,3.44这样,就将它们保存为浮点数。使用Java,如何解决这个问题?数据库中相应的字段类型为varchar。

这真的很令人困惑,你是在问如何使用Float.toString(val)吗? - Will
你确定浮点数确实是最适合你的问题域吗?如果你想要精度,应该使用BigDecimal。 - Viktor Klang
5个回答

20

只需尝试int i = (int) f;

编辑:我理解问题所在。这段代码可能会起作用:

 int i = (int) f;
 String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f);

1
这将把所有浮点数转换为整数,这并不是原始问题所要求的。 - user7094
1
浮点字符串怎么办,伙计?你把浮点数转换成整数了。这不是我想要的。 - Sawyer
1
实际上这个程序运行良好:它并没有将所有的浮点数转换为整数。它只是将整数值存储在“i”中,以便与浮点值进行比较。如果相同(即以.0结尾),则返回“i”,否则将原始值作为字符串返回... @Tony,valToStore是一个字符串。这就是你要求的... - Philippe

6
String result = "0";
if (floatVar == Math.floor(floatVar)) {
    result = Integer.toString((int) floatVar);
} else {
    result = Float.toString(floatVar);
}

if语句检查数字是否为整数 - 即它是否等于四舍五入到最接近的整数值。

但这确实是一个非常奇怪的要求,也许您应该重新考虑是否需要这样做。


3
他正在要求一个整数字符串,所以将该行转换为int的代码应该类似于String str = Integer.toString((int)floatVar); - Håvard S
1
你需要一个“if”测试和一个转换为字符串。我认为你很难找到比Bozho的更快的解决方案。 - Carl Smotricz
1
@Tony - 你为什么认为它不够“快”? - Bozho
1
不,它不是 ;) 编译器将 L + "" 转换为 Float.toString(L) - Bozho
我是 ;),你接受的答案比较慢,因为它有额外的方法调用。当然,这是可以忽略的 :) - Bozho
显示剩余3条评论

1
似乎您希望将没有尾数的浮点数保存为整数,而将具有重要尾数的浮点数保存为浮点数。我宁愿将所有内容保存为浮点数存储在数据库中,但这是您的问题,所以这是我的答案:
/**
   * Method to determine if trailing numbers are significant or not. Significant
   * here means larger than 0
   * 
   * @param fFloat
   * @return
   */
  public static boolean isTrailingSignificant(Float fFloat)
  {
    int iConvertedFloat = fFloat.intValue();// this drops trailing numbers
    // checks if difference is 0
    return ((fFloat - iConvertedFloat) > 0);
  }

这是使用该方法的方式:

此处省略具体内容

 Number oNumToSave = null;
if (isTrailingSignificant(fFloat))
{
  // save float value as is
  oNumToSave = fFloat;
}
else
{
  // save as int
  oNumToSave = fFloat.intValue();// drops trailing numbers      
}

之后,您可以使用变量oNumToSave执行数据库操作。


0

不太确定这是否是最佳解决方案,但您可以尝试编写类似于以下方法:

String convertToString(Float f) {
  if (f.toString().endsWith(".0"))
      return f.intValue().toString();
  else
      return f.toString();
}

0

Kotlin:

    val mAmount = 3.0
    val intAmount = mAmount.toInt()
    val amountToDisplay = if (intAmount.compareTo(mAmount) == 0) intAmount.toString() else java.lang.String.valueOf(mAmount)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接