Java Удалить все случаи .0 - PullRequest
2 голосов
/ 05 января 2012

Я хочу, чтобы фильтр проходил через строку и удалял все ненужные .0 из двойников. Я уже пробовал замену, но случаи как 8.02 превращаются в 82.

У меня такое чувство, что это было сделано раньше, но я не могу найти никакой помощи.

Я ищу метод, который будет принимать String, пример: «[double] плюс [double] равен [double]», где [double] - это double, который необходимо проверить для избыточного десятичного числа.

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 05 января 2012

скажем, у вас есть строка с именем s, которая содержит текст, который вы описали.просто сделайте:

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

и все готово.

ок, так что я редактировал это пару разтеперь это работает, хотя!

0 голосов
/ 05 января 2012

Другие посты предполагают, что вы работаете с короткой строкой, содержащей только десятичную дробь.Предполагая, что вы работаете с большими строками текста, вы можете использовать классы 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, поэтому используйте это как концепцию, чтобы получить то, что вы хотите.

0 голосов
/ 05 января 2012

Вы можете сделать это с java.text.DecimalFormat объектом.

0 голосов
/ 05 января 2012

Следующая программа удалит все конечные нули из дробной части двойного значения. Если ваши требования несколько иные, возможно, вам придется немного его изменить.

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.

0 голосов
/ 05 января 2012

Разве вы не можете убрать конечные нули, прежде чем встроить их в строку?Таким образом, вы можете использовать метод DecimalFormatter, который кто-то опубликовал ранее, а затем удалил.

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

Дайте им кредит на код, если они вернутся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...