Arhn - архитектура программирования

Генерировать число с плавающей запятой Случайное число между [0,1] и ограничивающим десятичным числом

Я хочу генерировать случайные числа с плавающей запятой между интервалом [0,1]. Сгенерированные случайные значения будут сравниваться с вводом из файла. Содержимое файла представляет собой вероятность (значения с плавающей запятой), поэтому они находятся в диапазоне [0,1] и выглядят так:

0.55

0.14

0.005

0.870

0.98

0

1

Я читаю этот файл и сохраняю значения вероятности в DoubleList. Теперь я хочу сгенерировать случайное число с плавающей запятой между [0,1]. Как вы видите, в файле есть значения вероятности до 1 цифры, 2 десятичных цифр и 3 десятичных цифр. Я использую следующий код:

public static double randomNumberGenerator()
{
    double rangeMin = 0.0f;
    double rangeMax = 1.0f;
    Random r = new Random();
    double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
    return(createdRanNum);
}

Сгенерированное случайное значение с плавающей запятой также должно быть похоже на значения вероятности (например, сгенерировано до максимальных десятичных цифр, как в файле). Как я могу ограничить сгенерированные десятичные цифры?

Я проверил следующую ссылку: случайное число Java от 0 до 0,06 . Люди предложили генерацию чисел Int, а затем сделали двойное деление на 100. Это хороший способ? Можем ли мы ограничить десятичное число, сгенерированное напрямую?

PS: Если я сравню случайно сгенерированное число из приведенного выше кода с двойными значениями из файла, возникнут ли проблемы с нехваткой памяти в DoubleList?

30.10.2015

  • Вам нужно более четко сформулировать свой вопрос. Правильно ли я понимаю, что вы хотите сгенерировать случайное число в диапазоне (0, x), где x — значение в файле? Например, для первого числа 0,55 вам нужно случайное число в диапазоне (0,0,55)? 30.10.2015
  • double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); — лучшее решение, которое вы получите. Невозможно обмануть ваш выход из этого, если ваши числа не будут только полуслучайными, путем введения других ограничений, которые могут следовать более простой логике за счет меньшей истинной изменчивости. 30.10.2015
  • Привет, Джеймс, спасибо за ваш ответ. Нет. Я не хочу генерировать числа в диапазоне в файле. Я хочу сгенерировать случайное число в интервале [0,1] (оба включительно), но я хочу ограничить цифры сгенерированного случайного числа только тремя десятичными знаками. В настоящее время я получаю вывод вроде: 0.1899367620461322 30.10.2015
  • Hii Закон, Спасибо за ваш быстрый ответ. Я хочу взять только до 3 десятичных знаков из сгенерированных результатов, используя double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); Как это сделать? 30.10.2015

Ответы:


1

Вы можете просто использовать Java Random сорт :

Random rand = new Random();
float f = rand.nextFloat()

который возвращает случайное число с плавающей запятой от 0,0f (включительно) до 1,0f (исключительно).

Чтобы округлить результат nextFloat(), вы можете просто использовать вспомогательный метод, подобный следующему:

public static float round(float d, int decimalPlace) {
    BigDecimal bd = new BigDecimal(Float.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
}
30.10.2015
  • Это то, на что я хотел ответить в первую очередь, но OP, похоже, нужно обрезать десятичные дроби. 30.10.2015
  • @Mena, чтобы он мог обрезать результат случайного следующего числа с плавающей запятой, я думаю, что это правильный путь. 30.10.2015
  • Большое спасибо. Алерут. Я хочу обрезать результат, полученный из двойного случайного числа. Как это сделать? Я не хочу округлять, используя функцию пола. 30.10.2015
  • @Shubhamagarwal Я добавил в свой ответ метод круглого примера 30.10.2015
  • Уважаемый Aleroot Спасибо за предложенный вами метод. Я использовал его при создании файла, но все еще вижу, что некоторые элементы все еще имеют одно место после запятой. Несмотря на то, что для параметра decimalPlace установлено значение 3. 01.11.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..