以下是具体细节。
说我有一个整数3.
如何确定3是否出现在double的任何小数位。说0.098734。我知道你可以将double转换为String然后搜索字符串,但有没有办法用模数或其他方法来做?
答案 0 :(得分:0)
双精度并不精确,与下一个双精度的差异会有所不同。 因此,考虑到双倍最多为precision of ca 17 digits,然后:
boolean hasDecimalDigit(double x, int digit) {
if (x < 0) {
x = -x;
}
for (int i = 0; i < 17; ++i) {
x *= 10;
if (((int)x) % 10) == digit) {
return true;
}
}
return false;
}
这很可能与String表示不一致, 这往往有点美化。
还有一些限制,溢出。采用第一模1可能会减少一些效果,但即使采用模数也可能会为大数量引入垃圾精度。
为了保持精度,请使用BigDecimal,如下所示:
BigDecimal x = new BigDecimal("0.098734");
这给出了精确的精确定点数学。
答案 1 :(得分:-1)
转换为字符串(就像打印时一样),然后执行charAt或indexOf比较