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

Java 将字符串转换为数组或浮点数列表,java,arrays,string,list,Java,Arrays,String,List,我有一个由十四个值组成的字符串,用# 0.1#5.338747#0.0#。。。。等等 我想将每个值从一个字符串转换为一个浮点或双精度小数点后3位。我可以在漫长的道路上完成大部分工作 str = "0.1#0.2#0.3#0.4"; String[] results; results = str.split("#"); float res1 = new Float(results[0]); 但我不确定将每个浮点数设为小数点后3位的最佳方法。我也更喜欢用类似for循环的简洁方式来实现这一点,但我无

我有一个由十四个值组成的字符串,用#

0.1#5.338747#0.0#。。。。等等

我想将每个值从一个字符串转换为一个浮点或双精度小数点后3位。我可以在漫长的道路上完成大部分工作

str = "0.1#0.2#0.3#0.4";
String[] results;
results = str.split("#");
float res1 = new Float(results[0]);
但我不确定将每个浮点数设为小数点后3位的最佳方法。我也更喜欢用类似for循环的简洁方式来实现这一点,但我无法理解它。

String str=“0.1#0.2#0.3#0.4”;
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[]results=str.split(“#”); float fResult[]=新浮点[results.length()]; 对于(int i=0;i
您可以通过以下方式完成:

final String str=“0.1#0.2#0.3#0.4”;
final Iterable floats=Iterables.transform(Splitter.on(“#”)split(str),新函数(){
公共浮点应用(最终字符串src){
返回浮点值(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()));
}
final String str=“0.1#0.2#0.3#0.4”;
最终StringTokenizer strTokenizer=新的StringTokenizer(str,“#”);
最终列表浮动=新的ArrayList();
while(strTokenizer.hasMoreTokens()){
Float.add(Float.valueOf(strTokenizer.nextToken());
}

四舍五入到3位小数

    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;
    }
String[]parts=input.split(“#”);
float[]数字=新的float[parts.length];
对于(int i=0;i
为了获得小数点后3位,请尝试以下方法:

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);
    }
}
希望这有助于

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());
}
String input=“0.1#5.338747#0.0”;
String[]splittedValues=input.split(“#”);
List convertedValues=new ArrayList();
for(字符串值:splittedValues){
convertedValues.add(新的BigDecimal(value).setScale(3,BigDecimal.ROUND_天花板).floatValue());
}

不错。你漏掉了3个小数,是的,我漏掉了,因为这是一个浮点数,它不会被削减到3个小数。不完全是,是的。但是从OP的角度来看,
5.3390003
可能比
5.338747
更好。舍入仍然有一些效果…String.format使用半偶数舍入模式,这可能是您想要的,也可能不是您想要的。此外,您还必须警惕区域设置-parseFloat采用标准表示法(例如1.23),而String.format使用区域设置并可能输出类似于1,23的内容,这将导致parseFloat抛出NumberFormatException。
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());
}