为什么将float除以整数返回0.0?

Ari*_*sen 40 java math division integer-division

因此,如果我有一个数字范围'0 - 1024'并且我想将它们带入'0 - 255',则数学将要求将输入除以输入的最大值(在这种情况下为1024),这将给出我是一个介于0.0 - 1.0之间的数字.然后乘以目标范围,(255).

这就是我想要做的!

但由于某种原因,在Java中(使用Processing)它总是返回值0.

代码就像这样简单

float scale;
scale = (n/1024) * 255;
Run Code Online (Sandbox Code Playgroud)

但我得到0.0.我试过double和int.一切都无济于事.为什么!?

tim*_*tes 73

这是因为你正在进行整数除法.

除以double或float,它将起作用:

double scale = ( n / 1024.0 ) * 255 ;
Run Code Online (Sandbox Code Playgroud)

或者,如果你想把它当作浮子,

float scale = ( n / 1024.0f ) * 255 ;
Run Code Online (Sandbox Code Playgroud)


Ale*_* C. 19

n/1024是整数除法,它产生一个整数(在这种情况下为0).

n / 1024.0改用.


Joh*_*ica 7

我认为n是一个int.因为常量1024和255都是ints所有右侧计算都是用整数运算完成的.意味着结果n/1024在被乘以之前被截断为整数值255.

任何这些修改都将使计算正常工作:

scale = n / 1024.0 * 255.0;       // Use double constants.
scale = (double) n / 1024 * 255;  // Convert n to a double.
scale = n * 255 / 1024;           // Multiply before dividing.
Run Code Online (Sandbox Code Playgroud)

最后一个仍然使用整数数学但是切换操作的顺序意味着你不会得到不希望的截断为0.你仍然只会获得整数答案,所以你将丢失答案中的任何小数点.