java如何检查数学结果是否可测量?

java如何检查数学结果是否可测量?,java,numbers,Java,Numbers,我想检查结果是否可以测量;也就是说,它是否有一个有限的数字,如果小数点。我是什么意思 double x = 5.0 / 9.0; // x = 0.(5) x是不可测量的。 我想将x四舍五入到第二位(x=0.56),但在这种情况下: double x = 1.0 / 8.0; // x = 0.125 我什么都不想拐弯抹角。 这是我的问题。如何确定结果是否可以测量?您不能。这就是为什么1.0/3/100*3*100为您提供0.9999…9的原因。您只有这么多位来表示数字。您无法区分句点 1.

我想检查结果是否可以测量;也就是说,它是否有一个有限的数字,如果小数点。我是什么意思

double x = 5.0 / 9.0; // x = 0.(5)
x是不可测量的。 我想将x四舍五入到第二位(x=0.56),但在这种情况下:

double x = 1.0 / 8.0; // x = 0.125
我什么都不想拐弯抹角。
这是我的问题。如何确定结果是否可以测量?

您不能。这就是为什么
1.0/3/100*3*100
为您提供
0.9999…9
的原因。您只有这么多位来表示数字。您无法区分句点
1.0/3
和实际值为
0.3333…..3
的数字

在二进制中唯一精确表示的分数是分母为二次幂的分数。如果您的输入是分子和分母的两个整数,则查找两者的素因子分解并删除公因子。然后检查分母上唯一剩余的因子是2的幂。假设我们想要找到56/70,这是2^3*7/(2*5*7),去掉公因子得到2^2/5,这样就不起作用了。但63/72=(7*3^2)/(2^3*3^2)=7/2^3,因此将是终止二进制数


如果您使用十进制,那么分母上的2和5的幂是允许的。

您的意思是,如果数字是终止的十进制数吗?是的,对不起,这是英语,但是很难从母语翻译这些特定的单词。您能在这里澄清这些情况吗,具体来说,什么是不可测量的?不存在带双精度的无限小数。曾经根据定义。因为double是一种精度有限的类型。如果你想格式化输出,看这里()分子和分母总是整数吗?如果是这样,你应该把分数简化成最简单的形式,并找到分母的素因子分解。当且仅当分母的素数因子分解中的唯一素数为2和5时,商将是终止小数。如果分子和分母不能保证是整数,那么这个问题就要困难得多。