Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用一条语句自动格式化字符串中的数字?_Java - Fatal编程技术网

Java 用一条语句自动格式化字符串中的数字?

Java 用一条语句自动格式化字符串中的数字?,java,Java,假设我有一个包含一些字符和数字的文本,就像这样: Lorem ipsum 10.2357 dolor sit amet,10.0000 Concetetur Adipsicing 50.9651 elit. 如何获得这样的最终字符串: Lorem ipsum 10.23 dolor sit amet,10.00 Concertetur Adipsicing 50.96 elit. 使用单个语句,而不创建其他方法 ->更新 我希望在单个语句中执行此操作,因为我希望在jasper reports中执

假设我有一个包含一些字符和数字的文本,就像这样:

Lorem ipsum 10.2357 dolor sit amet,10.0000 Concetetur Adipsicing 50.9651 elit.

如何获得这样的最终字符串:

Lorem ipsum 10.23 dolor sit amet,10.00 Concertetur Adipsicing 50.96 elit.

使用单个语句,而不创建其他方法

->更新
我希望在单个语句中执行此操作,因为我希望在jasper reports中执行此操作,jasper reports不支持多个语句。我可以为此创建一个方法,但这对于一件简单的事情来说是太多的工作了

我不是Java专家,但很可能您正在寻找
printf
eqivalent,在Java中是:

System.out.format(“PI是%.2f”,3.14)


查找
%f

的格式选项我不是Java专家,但您可能正在寻找
printf
eqivalent,它在Java中是:

System.out.format(“PI是%.2f”,3.14)


查找
%f

的格式选项它不能在一行中实现

    String s = "Lorem ipsum 10.2357 dolor sit amet, 10.0000 consectetur adipiscing 50.9651 elit";
    DecimalFormat df = new DecimalFormat("#.##");
    String[] sub = s.split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<sub.length; i++) {
        try {
            double d = Double.parseDouble(sub[i]);
            sb.append(df.format(d));
            sb.append(" ");
        } catch (Exception e) {
            sb.append(sub[i]);
            sb.append(" ");
        }
    }
    System.out.println(sb.toString());
String s=“Lorem ipsum 10.2357 dolor sit amet,10.0000 Concertetur Adipising 50.9651 elit”;
DecimalFormat df=新的DecimalFormat(“#.###”);
字符串[]sub=s.split(“”);
StringBuilder sb=新的StringBuilder();

对于(int i=0;i而言,它不可能在一行中实现

    String s = "Lorem ipsum 10.2357 dolor sit amet, 10.0000 consectetur adipiscing 50.9651 elit";
    DecimalFormat df = new DecimalFormat("#.##");
    String[] sub = s.split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<sub.length; i++) {
        try {
            double d = Double.parseDouble(sub[i]);
            sb.append(df.format(d));
            sb.append(" ");
        } catch (Exception e) {
            sb.append(sub[i]);
            sb.append(" ");
        }
    }
    System.out.println(sb.toString());
String s=“Lorem ipsum 10.2357 dolor sit amet,10.0000 Concertetur Adipising 50.9651 elit”;
DecimalFormat df=新的DecimalFormat(“#.###”);
字符串[]sub=s.split(“”);
StringBuilder sb=新的StringBuilder();

对于(inti=0;i您可以使用正则表达式()来实现

例如:

 str.replaceAll("(\\d+)\\.?(\\d{0,2})\\d+", "$1.$2")

这在所有情况下都不起作用。

您可以使用正则表达式()

例如:

 str.replaceAll("(\\d+)\\.?(\\d{0,2})\\d+", "$1.$2")

这不会在所有情况下都起作用。

您有任何格式规则吗?或者简单地截断
之后的部分。dd
可以像
1.5678
1.56
?您能解释一下限制在哪里吗“只需一条语句,而不需要创建其他方法”来自?听起来像是某种分配。@ci_u.看看我对问题的更新就做个方法吧,对于一个方法来说没有什么太简单的。你有什么格式规则吗?或者干脆把
后面的部分截断。dd
就可以了,就像
1.5678
1.56
?你能解释一下限制在哪里吗使用单个语句,而不创建其他方法"来自?听起来像是某种赋值。@ci_u看我对这个问题的更新就做一个方法吧,对于一个方法来说没有什么太简单的东西。这不符合问题中的要求,问题中有一个以数字为输入的字符串。这不符合问题中的要求,问题中有一个以数字为输入的字符串。这是正确的字符串上的数字总是有两个以上的数字,它总是有效的。谢谢。@mateusvicari替换
1.999
的结果应该是什么?它应该被四舍五入到
2.00
还是
1.99
可以吗?@Pshemo如果是2.00,它会更好,但精度在我的情况下并不那么重要。是的!正如我的数字一样字符串将始终有两个以上的数字,它将始终有效。谢谢。@mateusvicari替换
1.999
的结果应该是什么?应该将其四舍五入到
2.00
还是
1.99
可以吗?@Pshemo如果它是2.00,它会更好,但精度在我的情况下并不重要。