Можете ли вы безопасно сравнивать поплавки с целым числом, когда оно равно нулю? [Дубликат]

<\s*(\w+)[^/>]*>

Объясненные детали:

<: начальный символ

\s*: он может иметь пробелы перед именем тега (уродливым, но возможным).

(\w+): теги могут содержать буквы и цифры (h1). Ну, \w также соответствует «_», но это не мешает, я думаю. Если любопытное использование ([a-zA-Z0-9] +).

[^/>]*: все, кроме > и /, до закрытия >

>: закрытие >

UNRELATED

И для парней, которые недооценивают регулярные выражения, говоря, что они только настолько сильны, как обычные языки:

anbanban, который не является регулярный и даже контекстно-свободный, можно сопоставить с ^(a+)b\1b\1$

Обратное обращение FTW !

2
задан Maksim Dmitriev 14 January 2017 в 19:41
поделиться

1 ответ

Да, ваш конкретный пример прекрасен, так как оба 0 и 1 могут быть точно представлены как float.

Обратите внимание, что это не так в целом: есть много больших int значения, которые не могут быть представлены точно как float. Например, следующее выдает true ( Ideone ), хотя 2_000_000_001 не равно 2_000_000_000:

import java.util.*;
import java.lang.*;
import java.io.*;

class FloatTest {

    private static boolean isTwoBillion(float f) {
        return f == 2_000_000_000;
    }

    public static void main (String[] args) {
        System.out.println(isTwoBillion(2_000_000_001));
    }

}

Обратите внимание, что в отличие от float, double имеет достаточно большой мантиссы для хранения каждого 32-битного значения int.

Однако есть long значения, которые не могут быть представлены как double s. Это начинается с значения long 9_223_372_036_854_764, который равен Long.MAX_VALUE/1000 - 10. Номер один больше (...765) не имеет аналога double, тогда как следующий номер (...766). Иными словами, начиная с ...764 в качестве double, приращение последнего бит мантиссы дает ...766 при преобразовании обратно в long.

6
ответ дан Jim Garrison 16 August 2018 в 00:29
поделиться
  • 1
    Это было бы удивительно, если бы вы привели пример – Maksim Dmitriev 14 January 2017 в 19:43
  • 2
    @MaksimDmitriev: Я добавил пример. – NPE 14 January 2017 в 19:52
  • 3
    @NPE ваш ответ используется как цель-дубликат, поэтому я добавил некоторую информацию об long vs double. – Jim Garrison 9 January 2018 в 00:18
Другие вопросы по тегам:

Похожие вопросы: