powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Численное сравнение объектов - потомков класса java.lang.Number: как ?
7 сообщений из 7, страница 1 из 1
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38423580
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прямыми потомками класса Number, согласно доке, являются: BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short.
Содержимое этих классов есть всегда только числа, т.е. можно сравнивать именно их абсолютные величины.

Опять туплю: как это сделать в java ? Непосредственно сравнить Integer & Long нельзя - обломится на компиляции.
Решил объехать через вызов метода в передачей ему Number-объектов - а фиг:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.math.*;
class NumsComparison {
  static {
    Integer a = 0;
    Long b = 0L;

    BigInteger n = new BigInteger("123456");
    BigDecimal m = new BigDecimal("123456");

    System.out.println( numCmp(a, b) );
    System.out.println( numCmp(n, m) );
    System.exit(0);
  }
  private static boolean numCmp(Number x, Number y) {
    return x.equals(y);
    // -!- return x.compareTo(y);
  }
}

- выдаёт false + false.
Тогда как сравнивать-то ?
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38423593
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Number нельзя сравнивать, так как они не реализуют Comparable. Все, что вы можете сделать, это вызвать на Number какой-нибудь публичный метод вроде intValue(), и сравнить вернувшиеся значения.
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38423622
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не реализуют они интерфейс Comparable, потому что он задает отношение полного порядка, а такой порядок возможен не на всех Number. Например, на числах с плавающей запятой нет отношения полного порядка (NaN не меньше, не больше, и не равен никакому другому числу, и даже не равен самому себе). Более того, существуют mutable Numbers (например, AtomicInteger), для которых отношение порядка задавать дурной тон.
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38423633
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще есть комплексные числа, для которых отношение порядка можно задавать по-разному.

Если предположить, что все числа вещественные, то самое простое так (видимо еще нужна обработка специальных значений типа Nan, +0, -0, infinity и т.п.)
Код: java
1.
2.
3.
4.
5.
public class NumberComparator implements Comparator<Number> {
    public int compare(Number n, Number m) {
        return new BigDecimal(n.toString()).compareTo(new BigDecimal(m.toString()));
    }
}
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38424360
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvNumber нельзя сравнивать, так как они не реализуют Comparable. Все, что вы можете сделать, это вызвать на Number какой-нибудь публичный метод вроде intValue(), и сравнить вернувшиеся значения.

Здравствуй, великолепный очень-высокоуровневый объектноориентированный язык Java!

В общем, я бы написал на Reflection некую функцию, которая бы брала типы данных обоих аргументов,
пары, и, анализируя их, выбирала бы нужный способ сравнения.

Когда типы одинаковы, всё понятно более менее.
Когда разные -- надо преобразовывать к "старшему" типу и сравнивать их значения.
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38424365
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МужикА не реализуют они интерфейс Comparable, потому что он задает отношение полного порядка, а такой порядок возможен не на всех Number. Например, на числах с плавающей запятой нет отношения полного порядка (NaN не меньше, не больше, и не равен никакому другому числу, и даже не равен самому себе). Более того, существуют mutable Numbers (например, AtomicInteger), для которых отношение порядка задавать дурной тон.

Ага, а исключение бросать в этом случае -- не ? Не додуматься было ?
...
Рейтинг: 0 / 0
Численное сравнение объектов - потомков класса java.lang.Number: как ?
    #38424371
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МужикА еще есть комплексные числа, для которых отношение порядка можно задавать по-разному.


Как говорится, желание -- это тысяча способов, а нежелание -- тысяча причин.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Численное сравнение объектов - потомков класса java.lang.Number: как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]