2010-12-07 2 views
52

У меня есть два целых числа: x и y. Мне нужно вычислить x/y, и в качестве результата я хотел бы получить float. Например, в результате 3/2 я хотел бы иметь 1.5. Я думал, что самый простой (или единственный) способ сделать это - преобразовать x и y в тип float. К сожалению, я не могу найти простой способ сделать это. Не могли бы вы мне помочь?Как преобразовать целое число в float в Java?

+7

float result = ((float) x)/y? – mibollma

+0

проверить это: http://xahlee.org/java-a-day/casting.html – fasseg

+2

Возможный дубликат [Java: разделение 2 ints делает int?] (Http://stackoverflow.com/questions/787700/ java-divisioning-2-ints-make-an-int) – dogbane

ответ

103

Вам просто нужно бросить по крайней мере один из операндов с плавающей точкой:

float z = (float) x/y; 

или

float z = x/(float) y; 

или (ненужную)

float z = (float) x/(float) y; 
+0

Является ли это более эффективным, чем: float z = (1.0 * x)/y; ? Является ли плавающее преобразование внутренне более эффективным, чем умножение? Tnx! – MSquare

+1

Я не знаю, но я думаю, что это не имеет значения 99% и более того времени. Это даже не отдаленно будет узким местом. Если вы действительно так обеспокоены, [сравните его сами.] (Http://stackoverflow.com/q/504103/139010) –

+1

Первый и второй вызовет ошибки на некоторых устройствах ручного управления, убедитесь, что вы выбрали оба целых числа. –

3

Вот как вы можете это сделать:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int x = 3; 
    int y = 2; 
    Float fX = new Float(x); 
    float res = fX.floatValue()/y; 
    System.out.println("res = "+res); 
} 

До встречи!

+7

Использование типа оболочки ('Float') для этого совершенно необязательно. –

+0

Вы совершенно правы, ваш ответ намного лучше :) – LaGrandMere

+1

Пожалуйста, [не используйте подписи или метки] (http://stackoverflow.com/faq#signatures) в своих сообщениях. – meagar

5

Вы не должны использовать поплавок, если только не нужно. В 99% случаев двойной вариант - лучший выбор.

int x = 1111111111; 
int y = 10000; 
float f = (float) x/y; 
double d = (double) x/y; 
System.out.println("f= "+f); 
System.out.println("d= "+d); 

печатает

f= 111111.12 
d= 111111.1111 

После @ комментария Мэтта.

Поплавок имеет очень небольшую точность (6-7 цифр) и довольно значительную ошибку округления. double имеет еще 9 цифр точности. Стоимость использования double вместо float условна в 99% случаев, однако стоимость тонкой ошибки из-за ошибки округления намного выше. По этой причине многие разработчики рекомендуют не использовать с плавающей точкой вообще и настоятельно рекомендую BigDecimal.

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

В этом случае int x имеет 32-битную точность, тогда как float имеет 24-битную точность, даже деление на 1 может иметь ошибку округления. double, с другой стороны, имеет 53-битную точность, которой более чем достаточно, чтобы получить достаточно точный результат.

+3

Вы должны подробно остановиться на _why_ 'double' лучше, чем' float'. –

1

Самир:

float l = new Float(x/y) 

не будет работать, так как она будет вычислять деления на целое число х и у первого, а затем построить поплавок из него.

float result = (float) x/(float) y; 

Семантически лучший кандидат.

+0

Ваш ответ должен был быть комментарием. Самир не получит уведомления о вашем сообщении. Семантически преобразование обоих ints для float перед вычислением результата бесполезно - поэтому оно не лучше, чем преобразование только одного. Это дает неправильное впечатление и, следовательно, уступает, imho. –

4

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

float z = x * 1.0/y; 
3

// Целое Я хочу, чтобы преобразовать

int myInt = 100; 

// Литье целое для плавания

float newFloat = (float) myInt 
Смежные вопросы