res = input * random.nextInt (100) / 100.0;
Пояснение:
Вы берете целое число n и умножаете его на что-то. Если это число типа 34.56, мы называем часть перед десятичной цифрой w (целую часть), а часть за .xy.
Если вы умножите это на n, вы получите (n * w) + (n * (x / 10)) + n * (y / 100). За точкой никогда не будет дробных цифр части 3 - вы согласны?
Мы можем объединить x и y в одну часть и сказать (n * w) + (n * (xy / 100)), а xy - это просто имя от 0 до 100.
Поскольку часть перед десятичной точкой может быть произвольно большой, вы можете рассчитать ее отдельно, если вам нужно что-то еще, кроме 0. Но вы должны как-то определить диапазон. Если вы берете случайное целое число R для этой части:
res = input * R * random.nextInt (100) / 100.0;
Вам нужен дивизор explicityl?
div = 100.0 / (R * random.nextInt (100));
Scala всегда удобен при тестировании фрагмента кода:
val r = util.Random
r: util.Random.type = scala.util.Random$@ce2f12
scala> def res (input: Int) = input * r.nextInt (100) / 100.0;
res: (input: Int)Double
scala> (1 to 20).map (res)
res338: scala.collection.immutable.IndexedSeq[Double] =
Vector(0.48, 1.58, 0.48, 2.8, 0.15, 1.98, 5.67, 3.36, 6.93, 6.0, 9.02, 0.48, 7.41, 6.44, 9.6, 1.92, 16.66, 5.94, 7.98, 18.4)