Вы можете использовать RuleBasedNumberFormat. например, результат даст вам Ninety
ULocale locale = new ULocale(Locale.US); //us english
Double d = Double.parseDouble(90);
NumberFormat formatter = new RuleBasedNumberFormat(locale, RuleBasedNumberFormat.SPELLOUT);
String result = formatter.format(d);
Он поддерживает широкий диапазон языков.
Обычно вы используете генератор случайных чисел. Большинство из них возвращает число в интервале [0,1], поэтому вы должны проверить, является ли это число < = x (процент / шанс) или нет. Ниже приведен пример кода
double x=0.1;
if( Math.random() <= x ) {
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
}
, здесь я выбираю вероятность того, что x будет 10%, т.е. 0,1. так что в 10% случаев вы получите случайное число. Вы можете сделать наоборот для вас, а также в соответствии с вашими требованиями
Вы хотите, чтобы ваши x
применялись случайным образом или были детерминированными?
Случайный вариант:
Если вы хотите, чтобы x
также был случайным, вы можете просто сгенерируйте случайное значение:
int percent = ThreadLocalRandom.current().nextInt(1, 100);
if (percent < x) {
// ...get the actual random value.
}
percent
должно быть между 1 и 100, поэтому у вас есть ровно 100 возможных значений. Если вы включите 0
, у вас есть 101. Затем вы делаете свою проверку процента. Если процент находится снаружи (больше чем) x
, x
был слишком мал. Следовательно, вы получаете false
, в противном случае - true
. Оттуда вы можете работать с if
-условием.
Детерминированный вариант:
Если детерминирован, это зависит от вашего предпочтительного поведения. Например, вы можете использовать счетчик, и каждый раз, когда вы превышаете 100, вы «ломаетесь» и возвращаете истину:
// object attribute.
private Integer accumulator = 0;
// in method (should be synchronized, at least on accumulator, if you use multithreading):
accumulator += x;
boolean overflow = false;
if (accumulator >= 100) {
overflow = true;
accumulator %= 100; // this applies modulo 100 to accumulator.
}
if (overflow) {
// ...get the actual random value.
}
При этом вы получите ровно x
процентов от true
с, чем больше вы называете свой метод. В начале у вас ничего не будет, если не считать 100%, но со временем точность возрастает.