Nano Hash - криптовалюты, майнинг, программирование

Android - Как правильно разобрать строку для плавающей (формат числа цен: целое число, десятичные числа или оба)

Я пытаюсь проанализировать входную строку от пользователя и преобразовать ее в число с плавающей запятой.

String[] inputs = {
      "100",
            "100.0",
            "100.00",
            "100.00000",
            "100.1",
            "100.10",
            "100.11",
            "100.111",
            "1.0",
            "0.1",
            "0.10",
            "0.1000",
            "0.111",
            "100,00",
            "1,000.15"
    };

    for (String input : inputs) {
        try {
            input = input.replace(",", ".");
            Float value = Float.valueOf(input);

            if (value == 0F) {
                Log.d("APP", "--> NOPE: " + value);
                continue;
            }

            String oldInput = input;

            DecimalFormat dc = new DecimalFormat(value > 1F ? "#.00" : "#0.00");
            input = dc.format(value);
            value = Float.valueOf(input);

            Log.d("APP", oldInput + " -> " + value);
        }
        catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }

Что дает мне следующие результаты:

100         -> 100.0
100.0       -> 100.0
100.00      -> 100.0
100.0000    -> 100.0
100.1       -> 100.1
100.10      -> 100.1
100.11      -> 100.11
100.111     -> 100.11
1.0         -> 1.0
0.1         -> 0.1
0.10        -> 0.1
0.1000      -> 0.1
0.111       -> 0.11
100,00      -> 100.0

Проблема возникает, когда я получаю входную строку, подобную этой:

1,000.25

Возникает исключение java.lang.NumberFormatException: multiple points

  1. Является ли 1,000.25 допустимым вводом? (Валюта из США?)
  2. Есть ли лучший или гораздо более оптимизированный способ разбора ввода?

  • , для форматирования удалите его с помощью замены 07.06.2017
  • 1000,25 после замены символов равно 1,000,25, что не является допустимым числом с плавающей запятой, если «,» — это просто визуальный разделитель, вы можете изменить input = input.replace(",", "."); на input = input.replaceAll(",", ""); 07.06.2017

Ответы:


1

Попробуй это:

float result = Float.parseFloat(string.replaceAll(",", ""));
07.06.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..