使用符号Java将Array转换为Floats数组

时间:2013-07-24 12:08:04

标签: java

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

甚至试过这样的事情:

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]);
}

3 个答案:

答案 0 :(得分:0)

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

根据JLS

  

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

答案 1 :(得分:0)

将原始数组保持在成员浮动的位置,然后创建一个“String myToString()”方法,使用+“f”打印它。 我的意思是,创建一个个性化的方法来打印数组,就像你希望它出现一样。

我假设你只是希望浮点数组的打印出现“最终f”。 机器中数字的表示不会随着f的变化而变化。 解析数字时, 字符串 中的最后一个f非常有用,因此解析器知道它是哪种数字,如果您还没有告诉它。

答案 2 :(得分: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())
}

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

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

readJavaFormatString(String)String转换为double.floatValue()double转换为FloatingDecimal包裹的float 1}},传递给上面的构造函数。 所以,简而言之,你确实有一个float

NB:

float num1 = XYZ;
float num2 = XYZf;

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

另外,除非有充分理由这样做,否则你真的不应该使用float,特别是如果你打算使用==进行比较;相反,使用doublefloatdouble基本相同,只是double是64位,而float是32位,所以double更多精确。