Как сравнить проценты, которые являются строками? - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть строка "+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;}
        }
    }

Ответы [ 2 ]

4 голосов
/ 14 сентября 2010

Как насчет удаления символа процента и последующего преобразования в число?

s.substring(0, s.length - 1)
1 голос
/ 14 сентября 2010

Просто следите за обработкой исключений. Возвращение 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));
...