对不起标题名称,但这可能是一个有趣的问题。我需要像这样。我有一个格式为[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]);
}
答案 0 :(得分:0)
f
用于告诉编译器将其视为浮点数。如果您希望以此格式使用数组,请使用字符串数组并在每个元素中附加f
根据JLS:
浮点文字的类型为float,如果后缀为ASCII字母
F
或f
;否则其类型为double,并且可以选择以ASCII字母D
或d
(§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;
尽管符号不同,num1
和num2
编译为相同的字节码(其中XYZ
是一些数字,比如123);但是,您无法分配以f
结尾的数字来表示int
。此外,如果您尝试将int
放入浮点数,则最后不需要f
,但如果您的数字在基数右侧有任何数字,则需要附加f
以便编译时出现possible loss of precision
错误。
另外,除非有充分理由这样做,否则你真的不应该使用float
,特别是如果你打算使用==
进行比较;相反,使用double
。 float
和double
基本相同,只是double
是64位,而float
是32位,所以double
更多精确。