Я делаю игру типа лотереи и использую Math.random() для чисел. Я хочу, чтобы он всегда распечатывал номер, который вы получили по отношению к 0 - 100 (так что если Math.random вывел 0.03454, а число для победы было ниже 0,05, оно установило бы текст метки на 5). Как бы вы сделали это до всего 0,00? Вот некоторые из кода, если вы хотите увидеть, что я имею в виду.
public void lotterymath()
{
double x = Math.random();
System.out.println(x);
if (x <= 0.02)
output.setText("you win " + x);
else
output.setText( "you lost " + x);
}
У меня также есть кнопка ниже, которая вызывает lotterymath() кстати :)
Изменение: неправильно прочитать исходное сообщение:
Вы захотите умножить на 100, а затем наложить на int
чтобы усечь его, или вместо Math.round
:
System.out.println(Math.round(x*100)); // rounds up or down
или
System.out.println((int) (x*100));
Оригинал:
Используйте String.format(String, Object...)
:
System.out.println(String.format("%.2f", x));
%.2f
является строкой формата.
Ты пробовал
Math.round(x)
Оформить эту ссылку для документации: http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round(double)
EDIT: Возможно, я не мог полностью понять ваш вопрос, но я думаю, что если вы используете
Math.round(Math.random*100)
Вы получите число от 0 до 100.
правильный:
int var = (int)Math.round(Math.random()*100)
НЕПРАВИЛЬНО:
int var = Math.round(Math.random()*100)
вам нужно уменьшить значение до целого числа, прежде чем присваивать ему целочисленную переменную, чтобы не получить ошибку, подобную этой: ошибка: несовместимые типы: возможное преобразование с потерями из long в int
int var = Math.round( Math.random() * 3);
^
Я предпочитаю использовать BigDecimal при работе с числами с плавающей запятой
BigDecimal myRounded = new BigDeicmal(Math.random()).setScale(2, BigDecimal.ROUND_HALF_UP);
Поскольку Math.random() возвращает double между 0.0 и 1.0, вы можете просто умножить результат на 100. Таким образом, 0.0 * 100 = 0, 1.0 * 100 = 100, и все между ними всегда будет между 0 и 100.
Используйте Math.round(), чтобы получить полный целочисленный номер. Поэтому, если случайное число равно 0.03454, умноженное на 100 = 3.454. Закрой его, чтобы получить 3.
double
не может хранить 0,01, но он может хранить 0,01000000000000000020816681711721685132943093776702880859375 (фактическое значение; я не просто помял свои цифровые клавиши, чтобы получить это). Таким образом, нет способа округлитьdouble
точностью до 0,01 и сохранить результат какdouble
.