java сравнивает с методом from double to int tostring

#java #string #compareto

#java #строка #сравнение

Вопрос:

Как мне использовать compareto для double, и я хочу превратить его в int?

Пример был бы хорош. Я искал java api.

также возможно ли использовать операторы if и else с методом String toString? Мой продолжал сбоить в особых случаях.

я полный новичок в Java, думаю, я постоянно читал, чтобы учиться

Комментарии:

1. У вас там как минимум 3 разных вопроса. Почему бы вам не опубликовать часть кода, который вы пробовали?

2. я работаю над проектом для школы, поэтому я подумал, что общие примеры были бы хороши, поскольку это не обман. Я хочу выполнять свою работу честно, но примеры полезны, когда я их ищу.

3. Это справедливое замечание, но вы должны, по крайней мере, сформулировать свои вопросы более четко и уточняйте. Есть разница между «общим» и «расплывчатым и неясным».

4. Допустим, я был профессором (и это всего лишь я, ваше мнение может отличаться), и я поручил четырем студентам написать большую программу для … имитации планирования занятий студентов или чего-то в этом роде. Если бы они попросили кого-нибудь «дать мне алгоритм для планирования», я был бы склонен думать, что это граничит с мошенничеством (хотя, говоря «вот мой алгоритм, что вы думаете», может и не быть, это было бы в каждом конкретном случае.) Если бы они спросили кого-нибудь «как мне сравнить эти два значения», что является очень-очень маленьким компонентом системы, я бы сказал, что они проявляют изобретательность. YMMV (И будучи студентами, YGMV!)

Ответ №1:

Если вы хотите сравнить целое число с double, вам нужно преобразовать целое число в double. Пожалуйста, имейте в виду, что это не сработает наоборот, поскольку int не может содержать все значения, которые может double: значения будут округлены в меньшую сторону

 double d = 12.3;
return (int)d;
  

вернет 12 ! и doubles могут содержать значения, намного большие и маленькие, чем int мог бы

 double d = 1.337E42
return (int)d;
  

возвращает 2147483647 ! Между ними много порядков величины. Поэтому, пожалуйста, всегда преобразуйте int в double, чтобы этого не произошло.

Вы можете использовать следующий код для сравнения:

 int compare(double d, int i) {
   return new Double(d).compareTo(new Double(i));
}
  

Но имейте в виду, что Double отличается от double тем, что Double является объектом, а не примитивным типом, поэтому при обработке Double будет больше накладных расходов по сравнению с использованием double или int.

Что касается второй части вашего вопроса, я не совсем понимаю, в чем ваш вопрос / намерение. Пожалуйста, попробуйте прояснить это.

Ответ №2:

вы можете попробовать что-то вроде этого

     Double d = 10.0;
    Integer i = 10;
    d.compareTo(i.doubleValue());
  

или

     i.compareTo(d.intValue());
  

Я не уверен, какой из них вам нужен.

Комментарии:

1. Последний метод не будет работать корректно. Вставьте d = 10.3 и i = 10. Что происходит, так это то, что d.intValue() вернет 10. Таким образом, вы фактически сравниваете сейчас 10 с 10, а не с 10.3, как предполагалось.

2. @TheMorph Верно, но бывают случаи, когда вы могли бы сделать последнее, и, прочитав вопрос в том виде, в каком он был опубликован, я не мог сказать, каковы намерения OP с этим утверждением compareto for a double and i want to turn it into an int

Ответ №3:

Вы не хотите преобразовывать в String , потому что это привело бы к лексикографическому, а не числовому сравнению чисел.

Я буду понимать ваш вопрос так: «Как мне создать compareTo() метод для doubles?»

Я также думаю, что вы используете это для реализации структуры данных для удвоений.

Вот как я бы поступил по этому поводу. Когда вы создаете структуру данных, вы создаете ее как Double объект. Double это встроенный класс в java.lang пакете, который содержит double примитив.

Затем java автоматически приведет их к этому типу.

Причина, по которой вы хотите использовать Double класс в качестве определяющего типа для вашей структуры данных, заключается в том, что вы можете использовать его встроенный compareTo метод. Не существует способа заставить примитивный тип данных double содержать compareTo метод.

Вот некоторый код, который поможет вам начать, например:

 TreeMap <Double, String> myDoubleMap = new TreeMap <Double, String> (10);
for (int i = 0; i < 10; i  )
    myDoubleMap.put ( Math.sqrt( 10.0 * i) , ""   i);


System.out.println(myDoubleMap);
  

(Убедитесь, что вы импортировали java.util.TreeMap , если хотите запустить этот пример)

Комментарии:

1. Почему в этом вообще задействована древовидная карта?

2. Я думал, что OP пытается выяснить, как хранить double примитивные типы данных в структурах данных. Ошибка, которая указана для этого, заключается в том, что double не содержит compareTo() метода. Я указал в своем сообщении, что сохранение примитивного типа данных в структуре невозможно. Я использовал TreeMap в качестве простого примера, чтобы показать, что TreeMap структура данных (для которой требуется compareTo() метод) показывает, как добавлять примитивные типы в структуры данных, используя концепцию автоматической упаковки.

Ответ №4:

Я могу только догадываться о ваших точных требованиях. Вам следует попытаться уточнить их немного более четко.

Если вы хотите сравнить double и ints, это может быть сложно. У вас есть два варианта.

первый: преобразуйте double в int и сравните

 int compare(double d, int i) {
    int dint = (int)d;
    return Integer.compare(dint,i);
}

int compare(int i, double d) {
    int dint = (int)d;
    return Integer.compare(i,dint);
}
  

второе: преобразуйте int в double и сравните

 int compare(double d, int i) {
    double idouble = (double)i;
    return Double.compare(d,idouble);
}

int compare(int i, double d) {
    double idouble = (double)i;
    return Double.compare(d,idouble);
}
  

Комментарии:

1. Не преобразуйте double в int, он может сломаться, и он сломается, когда вы потеряете точность, и, более того, double может содержать значения, намного большие и меньшие, чем int. Или объясняется иначе: double не поместится в int. Следующий пример вывода: d: 1.337E42, (int)d: 2147483647, d == (int)d: false

2. Интересно — я бы ожидал, что (int)1e40 будет выдано исключение, а не безмолвный cap at MAX_VALUE . Это, однако, легко обнаруживается при проверке значения double.

3. В любом случае, это в лучшем случае предположение, поскольку требования крайне расплывчаты.

4. Я не был уверен, что произойдет, поэтому я попробовал это. Таков был результат. 😉 Что касается вашей проверки: Да, это можно сделать, но я считаю, что лучше понять, не нужны ли проверки, этого можно было бы избежать.

5. Но даже если бы возникло исключение для значений, слишком больших или маленьких для int: приведение double d = 10.3 к int вернет 10, прерывая сравнение по другой причине, поскольку double d = 10.3 будет казаться равным int i = 10.