#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 atMAX_VALUE
. Это, однако, легко обнаруживается при проверке значения double.3. В любом случае, это в лучшем случае предположение, поскольку требования крайне расплывчаты.
4. Я не был уверен, что произойдет, поэтому я попробовал это. Таков был результат. 😉 Что касается вашей проверки: Да, это можно сделать, но я считаю, что лучше понять, не нужны ли проверки, этого можно было бы избежать.
5. Но даже если бы возникло исключение для значений, слишком больших или маленьких для int: приведение double d = 10.3 к int вернет 10, прерывая сравнение по другой причине, поскольку double d = 10.3 будет казаться равным int i = 10.