другой результат в Java, как это можно исправить - PullRequest
0 голосов
/ 23 февраля 2012

Простой расчет дает другой результат в Java.

int a=5363/12*5;

out.println(a);// result is 2230 

Но на самом деле результат должен быть 2234.5

Как можно исправить этот результат Java?

Ответы [ 8 ]

6 голосов
/ 23 февраля 2012

Два вопроса:

  1. Выражение 5363/12*5 дает целочисленный результат (в частности, целочисленное деление).
  2. Переменная a имеет тип int (целое число).

Исправление:

double a=5363.0/12*5;
out.println(a);

Обратите внимание, что в целом вы не можете ожидать точных результатов при использовании арифметики с плавающей точкой.Следующее является очень хорошим чтением: Что каждый ученый должен знать об арифметике с плавающей точкой .

3 голосов
/ 23 февраля 2012

5363, 12 и 5 интерпретируются как целые. вычисление, фактически выполняемое здесь:

5363/12 = 446.9… - truncated to the int value 446
446 * 5 = 2230

Попробуйте указать как число с плавающей точкой и укажите, что числа в расчете также создаются как числа с плавающей точкой:

float a = 5363f/12f*5f
1 голос
/ 23 февраля 2012

Вместо использования double вы можете изменить порядок своего выражения.

Если предположить, что 5363/12 * 5 = 5363 * 5/12, это даст вам более точный ответ.Вы прокомментировали, что хотите округлить результат, поэтому вместо этого вам нужно добавить половину значения, на которое вы делите.

int a = (5363 * 5 + /* for rounding */ 6) / 12;
System.out.println(a);

печать

2235
1 голос
/ 23 февраля 2012

Поскольку все литеральные числа в правой части являются целыми числами (например, 5363, а не 5363.0), выражение вычисляется с использованием целочисленной арифметической семантики, т.е. / выполняет деление целых чисел.Таким образом, 5262/12 равняется 446 и 446 * 5 равняется 2230. Также ваша переменная a является int, которая может содержать только целое значение.

Чтобы исправить это, вам нужно сделать две вещи.Измените тип a на десятичный тип, например, float или double b), чтобы хотя бы один из 5363 и 12 был представлен как десятичный тип, например,

double a= 5363.0/12.0*5
1 голос
/ 23 февраля 2012

Взять a как двойное.

Принятие целого числа int округляет его до целого числа.

0 голосов
/ 23 февраля 2012

Используйте двойной double a = 5363/12 * 5; System.out.println (а);

или приведите целое число, чтобы предотвратить потерю или точность.

int a = ((int) 5363/12 * 5); System.out.println (а);

0 голосов
/ 23 февраля 2012

Кажется, что есть некоторые проблемы округления int / double:

double a=((double)5363/12)*5;
System.out.println("VALUE: "+a);

Отпечатки:

ЗНАЧЕНИЕ: 2234.5833333333335

Редактировать: округлениерезультат для целочисленного значения:

double a=((double)5363/12)*5;
long b=Math.round(a); //you can cast it to an int type if needed
System.out.println("ROUNDED: "+b);

Печать:

РАУНД: 2235

0 голосов
/ 23 февраля 2012

int является целым числом - ничего после ..

Вы должны использовать

double a = 5363d/12*5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...