Странный Java бросил исключение. Почему я не могу бросать Долго к Плаванию?

Вы не упоминали специфических особенностей о своей целевой среде или ограничениях, таким образом, это не может быть совершенно применимо..., но если Вы ищете способ эффективно отследить развивающуюся схему DB и не являетесь неблагоприятными идее использовать Ruby, миграции ActiveRecord являются правильными Ваш переулок.

Миграции программно определяют преобразования базы данных с помощью DSL Ruby; каждое преобразование может быть применено или (обычно) откатываться, позволяя Вам перейти к различной версии Вашей схемы DB в любом данном моменте времени. Файл, определяющий эти преобразования, может быть проверен в управление версиями как любая другая часть исходного кода.

, поскольку миграции являются частью ActiveRecord, они обычно находят использование в приложениях для направляющих полного стека; однако, можно использовать ActiveRecord, независимый от направляющих с минимальным усилием. См. здесь для более подробной обработки использования миграций AR за пределами направляющих.

16
задан Peter Mortensen 2 December 2012 в 10:41
поделиться

5 ответов

Было бы полезно, если бы вы предоставили трассировку стека.

В противном случае стандартным решением является замена (Float) someLongValue на someLongValue.floatValue ()

Если вы имеете дело с примитивными типами, вы можете просто преобразовать long в float, хотя это 5.1.2 Расширяющееся примитивное преобразование , но оно может потерять точность, поэтому будьте осторожны! Очевидно, у вас есть тип оболочки Long , который не может быть неявно преобразован, поэтому вы получаете classcastexception. Это может быть из-за автобокса или явного создания объекта Long.

Еще один незваный совет: если ваши допустимые значения десятичные в диапазоне от -10 до +10, стандартный тип данных - int (примитивный). избегайте float, если вы имеете в виду точные числа. long также не оптимален, потому что он не полностью атомарен, как int, и занимает в 2 раза больше памяти. Если вы разрешаете другое состояние «не назначено», тогда Integer , которое может принимать значение NULL, также в порядке.

16
ответ дан 30 November 2019 в 17:05
поделиться

В принципе, преобразовать long в float так же просто:

float f = (float)myLongVar;

У меня нет опыта используя JFormattedTextField , но вы можете попробовать преобразовать тип возвращаемого объекта в String, использовать .substring () , чтобы получить точное значение, и введите его в long. Возможно, это неправильный подход, но он может решить вашу проблему.

5
ответ дан 30 November 2019 в 17:05
поделиться

попробуйте следующее:

Long l = ...
Float f = new Float ((float)l.longValue());

т.е. вам нужно преобразовать ваш Long в примитивный (то есть не объектный) тип.

2
ответ дан 30 November 2019 в 17:05
поделиться

Если вы хотите преобразовать машинные битовые представления чисел типа float / double в байты / из байтов, см. Double.doubleToLongBits и Float.floatToIntBits и связанные функции.

0
ответ дан 30 November 2019 в 17:05
поделиться

Исключение происходит из-за того, что компилятор признает, что Long и Float не имеют зависимости родитель-потомок. В отличие от C ++, который пытается найти перегруженный оператор приведения.

Вы можете вызвать doubleValue () для любого из примитивных типов оболочки, производных от Number, поэтому это рекомендуемый способ делать то, что вы хотите:

double val = ((Number)textField.getValue()).doubleValue()

Здесь следует отметить несколько моментов: во-первых, я преобразовал вывод getValue () в Number. Таким образом, вы можете передумать и фактически возвращать значения Double в будущем, и вы не сломаетесь.

Кроме того, я использую двойные значения, а не float. JVM внутренне работает с double, поэтому нет причин использовать float, кроме как для экономии места в массиве.

11
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

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