C#: Как я делаю простую математику, с округлением, на целых числах?

С помощью Java 8 вы можете использовать метод format ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • f используется для значения floating точки.
  • 2 после десятичного знака, число десятичных знаков после .

Для большинства версий Java вы можете использовать DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));
19
задан Ian Boyd 26 January 2009 в 15:58
поделиться

7 ответов

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

int height2 = (int)Math.Round(width2 * (height1 / (float)width1));
16
ответ дан 30 November 2019 в 04:16
поделиться
int height2 = (width2 * height1) / width1;
3
ответ дан 30 November 2019 в 04:16
поделиться

Сделайте умножение сначала (как долго, поскольку они вряд ли переполнятся), и второе подразделение.

3/4 == 0 в целочисленной математике (целочисленная математика не делает вокруг на подразделении, она усекает).

при реальной необходимости в округлении необходимо или работать в фиксированной точке, плавающей точке или игре вокруг с модулем.

3
ответ дан 30 November 2019 в 04:16
поделиться

Тщательно продуманное на сообщении Jeffery, начиная с Вас обычно лучший шанс усеченных необходимых десятичных чисел, чем Вы имеют переполнения 32-разрядного целого числа (и потому что умножение & подразделение является коммутативным), необходимо обычно делать умножение перед подразделением.

0
ответ дан 30 November 2019 в 04:16
поделиться

Никогда не бросайте для плавания, это имеет еще меньше точности, чем 32-разрядное целое число. Если Вы собираетесь использовать плавающую точку, всегда используйте дважды вместо плавания.

1
ответ дан 30 November 2019 в 04:16
поделиться

Я исправлю неправильный код путем добавления нулевых строк кода:

float width1 = 4;
float height1 = 3;

float width2 = 137;
float height2 = width2 * (height1 / width1);

необходимо использовать плавания для переменных, которые могут возможно содержать десятичные числа. Это включает высоты, вычисленные от отношений. Можно всегда бросить к интервалу позже, если это - проблема.

1
ответ дан 30 November 2019 в 04:16
поделиться
int height2 = ((width2 * height1 * 10) + 5) / (width1 * 10);

До любого целочисленного деления, проверьте, чтобы удостовериться, что делитель не является нулем. Также обратите внимание, что это принимает положительное частное. Если отрицательный, округление должно быть-5, не +5.

0
ответ дан 30 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: