小编Tom*_*m K的帖子

将"0.1"与.1进行比较

我正在努力理解double的局限性.0.1不能在有限系统中表示,因为它是重复的二进制值.但是,当我声明一个变量并给它0.1时,它仍然打印为0.1而不是 .0999999999999999,1.00000000000000001或类似的东西.但是,如果我添加一个具有0.1十次的变量,那么它将出现在.9999999999999999中,这正是我所期望的.

真正的问题是,当我知道这是不可能的时候,为什么打印精确到0.1,我有证据证明这不是真正的价值?

double d  = 0.1;
System.out.printf("%.16f\n",d);
System.out.printf("%.16f", d + d + d + d + d + d + d + d + d + d);
Run Code Online (Sandbox Code Playgroud)

我想要做的是将字符串文字与双重转换进行比较,以查看字符串中的值是否可以用double精确表示.例如:

".5"== .5?预期答案:是的.

".1"== .1?预期答案:没有.

我正在尝试的比较是

number = new BigDecimal("0.1");
d = number.doubleValue();
if (number.compareTo(new BigDecimal(Double.toString(d))) == 0){
    // Doing something
}
Run Code Online (Sandbox Code Playgroud)

任何帮助理解为什么这不区分可以和不能用double表示的值将是值得赞赏的.

java string double

5
推荐指数
1
解决办法
854
查看次数

使用过多的听众是否有潜在的放缓?

在我正在编写的程序中,我将至少有 64 个 JButton。编写一个 ActionListener 还是编写 64 个 ActionListener 更好,每个一个?我不认为我会为每个 JButton 路由使用一个侦听器,但这确实让我想知道一些事情。是否有太多听众实际上会损害表演的点,如果有这样的事情,需要多少人?

java actionlistener

5
推荐指数
1
解决办法
543
查看次数

找到Java JButton数组的索引

我正在编写一个Java程序,其中有一系列按钮(不是计算器!),我正在寻找一种有效的方法来了解哪个JButton被点击了.据我所知,到目前为止,Java的唯一方法是将它们全部放在同一个ActionListener中,然后循环查找匹配项.

我刚想到的另一个解决方案是扩展JButton以在构造函数中包含唯一的ID号变量.在检查instanceof后将事件对象强制转换为JButton时,似乎应该可以工作.有点像使用分配给索引号的VB的Tag属性.

有更好/更优雅的方式吗?

java arrays swing jbutton

2
推荐指数
1
解决办法
1087
查看次数

为什么C变量的最大值和最小值接触?

我正在研究二进制数的教程.我想知道的一段时间是为什么所有整数最大值和最小值都接触.例如,对于无符号字节255 + 1 = 0和0 - 1 = 255.我理解所有进入它的二进制数学,但为什么决定让它们以这种方式工作而不是直线数字给出一个极端事件被破坏时出错?

c variables

0
推荐指数
1
解决办法
156
查看次数

标签 统计

java ×3

actionlistener ×1

arrays ×1

c ×1

double ×1

jbutton ×1

string ×1

swing ×1

variables ×1