【问题标题】:How to compare percentages that are strings?如何比较字符串的百分比?
【发布时间】:2011-04-11 23:00:45
【问题描述】:

我有一个字符串"+1.29%""-1.29%"

如何将其转换为浮点数或双精度数以便比较值?

这是我的比较器类的样子:

 package org.stocktwits.helper;

import java.util.Comparator;

import org.stocktwits.model.Quote;

    public class PercentChangeComparator implements Comparator<Quote>
    {
        public int compare(Quote o1, Quote o2) {
            try{
                String subChange1 = o1.getPercentChange();
                String subChange2 = o2.getPercentChange();

                float change1 = Float.valueOf(subChange1.substring(0, subChange1.length() - 1));
                float change2 = Float.valueOf(subChange2.substring(0, subChange2.length() - 1));

                if (change1 < change2) return -1;
                if (change1 == change2) return 0; // Fails on NaN however, not sure what you want
                if (change2 > change2) return 1;

                return 0;
            }catch(NullPointerException e){ System.out.println(e); return 0;}
            catch(NumberFormatException e){ System.out.println(e); return 0;}
        }
    }

【问题讨论】:

    标签: java string casting comparator


    【解决方案1】:

    请注意您的异常处理。返回 0 表示值相等,当字符串无效时您可能不希望这样做。

    不管怎样,试试这样的:

    DecimalFormat df = new DecimalFormat("+####.##%;-####.##%");
    Double double1 = (Double)df.parse("+12.34%");
    Double double2 = (Double)df.parse("-12.34%");
    
    //including test
    assertThat(double1, equalTo(Double.valueOf(.1234)));
    assertThat(double2, equalTo(Double.valueOf(-.1234)));
    
    assertThat(double1.compareTo(double2), equalTo(1));
    assertThat(double1.compareTo(double1), equalTo(0));
    assertThat(double2.compareTo(double1), equalTo(-1));
    

    【讨论】:

      【解决方案2】:

      去掉百分号然后转换成数字呢?

      s.substring(0, s.length - 1)
      

      【讨论】:

      • 我是这么想的 - 但没有回答,因为我认为我错过了什么哈哈。
      • 而不是检查 change1 并更改为并返回 1、0 或 -1。只是“返回 change2 - change1;”可能更容易
      • String subChange1 = o1.getPercentChange();字符串 foo = subChange1.substring(0, subChange1.length() - 1); //给我一个空指针异常...
      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多