0

抱歉标题名称,但这可能是一个有趣的问题。我需要这样。我有一个浮点数组,格式[10.0, 20.0, 30.0, 40.0, 50.0]我需要将数组表示为[10.0f, 20.0f, 30.0f, 40.0f, 50.0f]. 我尝试使用数组 List 来转换和添加符号并转换回来.. 但无论我尝试什么,我仍然得到一个看起来像双精度的浮点数组。有什么想法吗?

甚至尝试过这样的事情:

ArrayList<String> valuelist = new ArrayList<String>();
for(int z = 0; z < mValues.length; z++){
    valuelist.add(Float.toString(mValues[z]) + "f");
}  //its fine here but later changes

Object[] objarray2 = valuelist.toArray();
String[] stringfloat  = Arrays.copyOf(objarray2, objarray2.length, String[].class);              
float[] myfloat = new float[stringfloat.length];
for(int j =0; j< myfloat.length; j++){
    //myfloat[j] = Float.parseFloat(stringfloat[j]);
    myfloat[j] = Float.valueOf(stringfloat[j]);
}
4

3 回答 3

0

f用于告诉编译器将此视为浮点数。如果您希望您的数组采用这种格式,请使用字符串数组并附加到f每个元素中

根据JLS

如果浮点文字以 ASCII 字母Ff;为后缀,则它的类型为 float 否则它的类型是双精度的,并且可以选择以 ASCII 字母Dd(§4.2.3) 为后缀。

于 2013-07-24T12:15:47.097 回答
0

保留成员浮动的原始数组,只需创建一个“String myToString()”方法即可使用 +“f”按需要打印它。我的意思是,创建一种个性化的方法来打印您希望它出现的数组。

我假设您只是希望浮点数组的打印结果以最终 f 出现“出现”。数字在机器中的表示不会随着末尾的 f 而改变。字符串中的最后一个 f 在解析数字时很有用,因此解析器知道它是哪种数字,如果您已经不告诉它的话。

于 2013-07-24T12:16:53.707 回答
0

你有:

myfloat[j] = Float.valueOf(stringfloat[j]);

这是Float.valueOf(String)

public static Float valueOf(String s) throws NumberFormatException 
{
    return new Float(FloatingDecimal.readJavaFormatString(s).floatValue())
}

如您所见,它返回 a Float,它是通过Float(float)构造函数创建的,它很简单:

public Float(double value) 
{
   this.value = (float) value;
}

将areadJavaFormatString(String)转换String为 a double.floatValue()并将double包裹在 a中的 转换FloatingDecimal为 a float,然后传递给上面的构造函数。所以,我很短,你确实有一个float.

注意:

float num1 = XYZ;
float num2 = XYZf;

尽管符号不同,但num1编译num2成相同的字节码(其中XYZ有一些数字,比如 123);但是,您不能分配以 an 结尾的数字f来表示 an int。此外,如果您尝试将 anint放入浮点数中,则最后不需要 the f,但如果您的数字在基数右侧有任何数字,则需要附加 ,f以便编译时possible loss of precision出错。

此外,除非有充分的理由,否则您真的不应该使用float,特别是如果您打算==用于比较;相反,使用double. floatanddouble本质上是一样的,除了它double是 64 位,而 afloat是 32 位,所以 adouble更精确。

于 2013-07-24T13:17:36.153 回答