如何检查双精度数是否出现?

时间:2016-10-01 18:52:57

标签: java double

以下是具体细节。

说我有一个整数3.

如何确定3是否出现在double的任何小数位。说0.098734。我知道你可以将double转换为String然后搜索字符串,但有没有办法用模数或其他方法来做?

2 个答案:

答案 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比较