将字符串转换为浮点数数组或列表

3

我有一个由#分隔的14个值的字符串

0.1#5.338747#0.0#...等等

我想将每个值从字符串转换为三位小数的浮点数或双精度浮点数。我可以用比较冗长的方式完成大部分操作......

str = "0.1#0.2#0.3#0.4";
String[] results;
results = str.split("#");
float res1 = new Float(results[0]);

但我不确定将每个浮点数保留三位小数的最佳方法。 我也更喜欢在像for循环这样的东西中完成,但是无法想出解决方法。

5个回答

4

保留小数点后三位...

    String[] parts = input.split("#");
    float[] numbers = new float[parts.length];
    for (int i = 0; i < parts.length; ++i) {
        float number = Float.parseFloat(parts[i]);
        float rounded = (int) Math.round(number * 1000) / 1000f;
        numbers[i] = rounded;
    }

2
String str = "0.1#0.2#0.3#0.4";
String[] results = str.split("#");
float fResult[] = new float[results.length()];
for(int i = 0; i < results.length(); i++) {
    fResult[i] = Float.parseFloat(String.format("%.3f",results[i]));
}

String.format使用HALF_EVEN舍入模式,http://docs.oracle.com/javase/6/docs/api/java/math/RoundingMode.html 这可能是您想要的,也可能不是。此外,您必须注意区域设置 - parseFloat假定标准表示法(例如1.23),而String.format使用Locale并且可能输出类似于1,23的内容,这将导致parseFloat抛出NumberFormatException。 - claesv

2
你可以使用guava来完成这个任务:
final String str = "0.1#0.2#0.3#0.4";
final Iterable<Float> floats = Iterables.transform(Splitter.on("#").split(str), new Function<String, Float>() {
  public Float apply(final String src) {
    return Float.valueOf(src);
  }
});

或者使用Java API:
final String str = "0.1#0.2#0.3#0.4";
final StringTokenizer strTokenizer = new StringTokenizer(str, "#");

final List<Float> floats = new ArrayList<Float>();
while (strTokenizer.hasMoreTokens()) {
    floats.add(Float.valueOf(strTokenizer.nextToken()));
}

不错。不过你漏了三位小数。 - Lukas Eder
是的,因为它是一个浮点数,无论如何都不会被截断为3位小数。 - KARASZI István
不完全是,但从提问者的角度来看,5.3390003可能比5.338747更好。四舍五入仍然有一定的影响... - Lukas Eder

2
希望这能帮到你...
String input = "0.1#5.338747#0.0";
String[] splittedValues = input.split("#");
List<Float> convertedValues = new ArrayList<Float>();
for (String value : splittedValues) {
    convertedValues.add(new BigDecimal(value).setScale(3, BigDecimal.ROUND_CEILING).floatValue());
}

1

如果需要保留三位小数,可以尝试以下方法:

public class Test {
    public static void main(String[] args) {
        String str = "0.12345#0.2#0.3#0.4";
        String[] results;
        results = str.split("#");
        float res1 = new Float(results[0]);
        System.out.println("res = " + res1);
        // cut to right accuracy
        res1 = ((int) (res1 * 1000)) / 1000f;
        System.out.println("res = " + res1);
    }
}

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