Java设置不带舍入的double值
首先请注意,我在谷歌上找不到答案,所以这个问题非常简单
所以我试着制作一个java程序,包括查看图像中像素的颜色,并将其插入神经网络
我制作了一种方法,尝试将十六进制转换为神经网络的输入。(这意味着从0到1的值)
public double[] toHex(int a)
{
char[] hex = Integer.toHexString(a).toCharArray();
double[] out = new double[6];
for(int i = 2; i < hex.length; i++)
switch(hex[i - 2])
{
case('0'):
out[i - 2] = 0D;
case('1'):
out[i - 2] = 0.066D;
case('2'):
out[i - 2] = 0.133D;
case('3'):
out[i - 2] = 0.2D;
case('4'):
out[i - 2] = 0.266;
case('5'):
out[i - 2] = 0.333D;
case('6'):
out[i - 2] = 0.4D;
case('7'):
out[i - 2] = 0.466D;
case('8'):
out[i - 2] = 0.533D;
case('9'):
out[i - 2] = 0.6D;
case('a'):
out[i - 2] = 0.666D;
case('b'):
out[i - 2] = 0.733D;
case('c'):
out[i - 2] = 0.8D;
case('d'):
out[i - 2] = 0.866D;
case('e'):
out[i - 2] = 0.933D;
case('f'):
out[i - 2] = 1.0D;
}
return out;
}
但出于某种原因,当我查看生成的代码时,这样做总是导致1.0或0.0。有人能解释一下发生了什么事吗
编辑对不起。我很笨。我在看一个只显示0和f的特定部分,但我确实忘记了中断
# 1 楼答案
您在每个案例的结尾缺少
break
。它应该看起来更像如果没有这些,程序会从一个
case
到下一个,每个程序都会覆盖上一个程序的结果。由于最后一个案例有out[i - 2] = 1.0D
,因此这是您将始终从switch
中看到的结果