2016-01-28 3 views

ответ

0

Попробуйте сделать изменения как:

float val=(i/100f); 

В настоящее время вы деления Int посредством междунар который возвращает и Int и, следовательно, вы не получаете желаемого результата.

+0

Нет, вы не можете. Вам нужно явно отличать от double to float. (i/100.0) вернет двойное значение. –

+0

@SagarGandhi: - Спасибо, что указали это. –

2

С i & 100 являются целыми значениями, результатом их деления также будет целое число. Следовательно, вам нужно преобразовать, по крайней мере один из них (деление операндов) к float, & разделить на вместо:

for(int i=0;i<10;i++) // Change the loop step to 10 also 
{ 
    float val = (float)i/10; // or float val = i/(float)10; 
    System.out.println(val); 
} 

Выход:

0.0 
0.1 
0.2 
0.3 
0.4 
0.5 
0.6 
0.7 
0.8 
0.9 
1

i и 100 являются целыми числами , поэтому вернет целое число. Вы делите целые числа, что означает, что вы используете целочисленное деление.

В целочисленном делении дробная часть результата выбрасывается.

Попробуйте сделать это:

float val = (i/100f); 
0

Вы должны разделить float получить float, иначе int/int просто получением int и вы назначаете его к float.

float val=(Float.valueOf(i)/100); 
0

Причина в правилах продвижения java. в выражении (i/100) оба являются целыми, поэтому результат равен целым числам. 99/100 является o.99, когда преобразуется в целое становится 0.

Согласно спецификации языка Java (Numberic Promotion 5.6

Numeric promotion (§5.6) brings the operands of a numeric operator to a common type so that an operation can be performed. 

When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order: 

1. If any operand is of a reference type, it is subjected to unboxing conversion 
    (§5.1.8). 

2. Widening primitive conversion (§5.1.2) is applied to convert either or both 
    operands as specified by the following rules: 
    • If either operand is of type double, the other is converted to double. 
    • Otherwise, if either operand is of type float, the other is converted to float. 
    • Otherwise, if either operand is of type long, the other is converted to long. 
    • Otherwise, both operands are converted to type int. 
0

Типы данных i и 100 являются целыми числами в вашем выражении. Целочисленное деление (int/int) вычисляется как Math.floor(int/int) (эквивалент операции), и она всегда возвращает ноль в вашем случае.

попробуйте использовать один из следующих expresssions для преобразования по крайней мере один из операндов плавать или двойной.

float val=(float)i/100 или float val=i/(float)100 или float val=i/100.0f

1

Ваша проблема в том, что компилятор выполняет целочисленное деление на 2 целых чисел, то результат литья (0) к поплавку.Чтобы этого избежать, добавьте явное приведение в обе стороны вашего подразделения. Это будет выполняться раньше и выполнять деление с плавающей запятой.

float val = (float) i/100; 

// output 
0.0 
0.01 
0.02 
0.03 
... 
+2

Вы должны предоставить больше объяснений – Wouter

0

Это потому, что вы выполняете целочисленное деление.

Деление на двойной или поплавок, и он будет работать:

двойная шкала = (п/1024,0) * 255;

Или, если вы хотите, как поплавок,

поплавок масштаб = (п/1024.0f) * 255;

Или

поплавка вал = (поплавок) я/100; // covert i to float and divide

Смежные вопросы