2010-02-02 177 views
14

我想做一个这样的操作:如果给定的浮点数类似于1.0,2.0,3.0,我想将它们保存为整数(1,2,3)的数据库,如果它们是如1.1,2.1,3.44,我将它们保存为浮点数。使用java的这个问题的最佳解决方案是什么?数据库中的相应字段是varchar的类型。Java将浮点数转换为整数

+0

这真是令人困惑;你问如何使用Float.toString(val)? – Will 2010-02-02 09:24:52

+0

你确定浮点数真的最适合你的问题域吗?如果你想精确,你应该使用BigDecimal – 2010-02-02 09:28:00

回答

19

试试int i = (int) f;

编辑:我看到了问题中的观点。此代码可能工作:数量

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

这将把所有浮点值转换为整数,这并不是真正的原始问题。 – 2010-02-02 09:24:06

+1

浮子弦呢,伙计?你将一个float转换为int。这不是我想要的。 – Sawyer 2010-02-02 09:27:30

+1

其实这工作正常:它不是所有浮点值转换为整数。它将int值存储在“i”中,仅用于与浮点值进行比较。如果它是相同的(即它以.0结尾),那么它返回“i”,否则它将返回原始值作为字符串... @Tony,valToStore是一个字符串。这是你要求的... – Philippe 2010-02-02 09:55:17

5
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)行的东西; – 2010-02-02 09:31:11

+0

啊,是的,错过了“整数串”部分。谢谢 – Bozho 2010-02-02 09:36:08

+0

谢谢,但我不认为这很快。 – Sawyer 2010-02-02 09:39:23

0

不知道这是最好的解决办法,但你可以尝试写这样的方法:

String convertToString(Float f) { 
    if (f.toString().endsWith(".0")) 
     return f.intValue().toString(); 
    else 
     return f.toString(); 
} 
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执行数据库操作。