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)
我认为n
是一个int
.因为常量1024和255都是int
s所有右侧计算都是用整数运算完成的.意味着结果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.你仍然只会获得整数答案,所以你将丢失答案中的任何小数点.
归档时间: |
|
查看次数: |
48325 次 |
最近记录: |