【问题标题】:Java Remove all cases of .0Java 删除所有 .0 的大小写
【发布时间】:2012-02-02 21:04:01
【问题描述】:

我想要一个过滤器遍历一个字符串并从双打中消除所有不需要的 .0。我已经尝试过替换,但是像8.02这样的情况变成了82。

我感觉以前有人这样做过,但我找不到任何帮助。

我正在寻找一种可以采用String 的方法,例如:“[double] plus [double] is equal to [double]”,其中 [double] 是需要检查的双精度为多余的小数。

提前致谢!

【问题讨论】:

  • 您只想从小数部分中删除零吗?是前导还是尾随,或者任何一个?

标签: java string methods replace decimal


【解决方案1】:

在将尾随零构造到字符串之前,你能不能去掉它们?这样您就可以使用之前有人发布然后删除的DecimalFormatter 方法。

NumberFormat formatter = new DecimalFormat("0.##"); 
String str = formatter.format("8.0200"); 
System.out.println(str);

如果他们回来,请给他们代码。

【讨论】:

    【解决方案2】:

    您可以使用java.text.DecimalFormat 对象来做到这一点。

    【讨论】:

      【解决方案3】:

      以下程序将从双精度值的小数部分删除所有尾随零。如果您的要求有些不同,您可能需要稍作修改。

      final public class Main
      {
          public static void main(String...args)
          {
              System.out.println("Enter how many numbers you want to check:->");
              Scanner scan = new Scanner(System.in);
      
              final double KEY_VALUE = 0.0;
              final Double TOLERANCE = 0.000000000001d;
      
              int n = scan.nextInt();
              double[] a = new double[n];
              for (int i = 0; i < n; i++)
              {
                      a[i] = scan.nextDouble();
              }
      
              List<Double> newList = new ArrayList<Double>();
              for (int k = 0; k < n; k++)
              {
                  if (Math.abs(a[k] - KEY_VALUE) < TOLERANCE)
                  {
                          continue;
                  }
                  newList.add(a[k]);
              }
      
              System.out.println(newList);
          }
      }
      

      如果需要,可以具体使用DecimalFormat截断指定的小数位数,如下所示。

      double x=10.4555600500000;
      DecimalFormat df=new DecimalFormat("#.##");
      System.out.println(df.format(x));
      

      将返回10.46

      【讨论】:

        【解决方案4】:

        其他帖子假设您正在使用仅包含小数的短字符串。 假设您正在处理大量文本字符串,您可以使用 Pattern/Matcher 类(我在工作,所以赶紧发帖。检查错误)

        使用此正则表达式替换:

        /* >1 digits followed by a decimal and >1 zeros. Note capture group on first set of digits. This will only match decimals with trailing 0s, and not 8.0002 */
        (\d+)\.0+
        

        替换为

        /* First capture group */
        $1
        

        我不确定 Java 的正则表达式规则,所以将其作为一个概念来获得你想要的。

        【讨论】:

          【解决方案5】:

          假设您有一个名为 s 的字符串,其中包含您所描述的文本。只需这样做:

          s = s.replaceAll("([0-9])\\.0+([^0-9]|$)", "$1$2");
          

          你就完成了。

          好的,所以我编辑了几次。现在它可以工作了!

          【讨论】:

          • 这很有趣。它之前工作得很好,但现在它修复了最后一个数字的所有错误。例如:“10.0+1.0=11.0”变成“10+1=11.0”。有什么办法解决这个问题?
          • 哦,没想到 :( 但子字符串不是必需的。看看我的编辑,它也处理这种情况!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-28
          • 2020-02-05
          • 2011-06-23
          • 1970-01-01
          • 2021-04-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多