Преобразование double в float в Java
Я сталкиваюсь с проблемой, связанной с конвертированием double
в float
. На самом деле, я храню тип с плавающей точкой 23423424666767
в базе данных, но когда мы получаем данные из базы данных в приведенном ниже коде, getInfoValueNumeric()
, это тип double
. Значение, которое мы получаем, находится в форме 2.3423424666767E13
.
Итак, как мы можем получить данные в формате с float
, например 23423424666767
?
2.3423424666767E13 to 23423424666767
public void setInfoValueNumeric(java.lang.Double value) {
setValue(4, value);
}
@javax.persistence.Column(name = "InfoValueNumeric", precision = 53)
public java.lang.Double getInfoValueNumeric() {
return (java.lang.Double) getValue(4);
}
Ответы
Ответ 1
Просто добавьте двойное значение в float.
double d = getInfoValueNumeric();
float f = (float)d;
Также обратите внимание, что примитивные типы НЕ могут хранить бесконечный набор чисел:
float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e–308 to 1.7e+308
Ответ 2
Я предлагаю вам получить значение, хранящееся в базе данных как тип BigDecimal:
BigDecimal number = new BigDecimal("2.3423424666767E13");
int myInt = number.intValue();
double myDouble = number.doubleValue();
// your purpose
float myFloat = number.floatValue();
BigDecimal предоставляет вам множество функций.
Ответ 3
Преобразовать Double
в Float
public static Float convertToFloat(Double doubleValue) {
return doubleValue == null ? null : doubleValue.floatValue();
}
Преобразовать Double
в Float
public static Float convertToFloat(double doubleValue) {
return (float) doubleValue;
}
Ответ 4
Чтобы ответить на запрос "Как конвертировать 2.3423424666767E13 в 23423424666767"
Вы можете использовать десятичный форматтер для форматирования десятичных чисел.
double d = 2.3423424666767E13;
DecimalFormat decimalFormat = new DecimalFormat("#");
System.out.println(decimalFormat.format(d));
Выход: 23423424666767
Ответ 5
Преобразование из double в float будет суживающим преобразованием. Из doc:
Сужение примитивного преобразования может потерять информацию о общая величина числового значения, а также может потерять точность и Диапазон.
Сужение примитивного преобразования из double в float регулируется правила округления IEEE 754 (§4.2.4). Это преобразование может потерять точность, но также и потерять диапазон, в результате чего плавающий ноль от отличная от нуля двойная и бесконечная бесконечность от конечного двойника. Двойной NaN преобразуется в float NaN, а двойная бесконечность преобразуется в равнозначная плавающая бесконечность.
Так что это не очень хорошая идея. Если вы все еще хотите, вы можете сделать это, как:
double d = 3.0;
float f = (float) d;
Ответ 6
Проблема заключается в том, что ваше значение нельзя точно сохранить в режиме с плавающей точкой с одинарной точностью. Доказательство:
public class test{
public static void main(String[] args){
Float a = Float.valueOf("23423424666767");
System.out.printf("%f\n", a); //23423424135168,000000
System.out.println(a); //2.34234241E13
}
}
Другое дело: вы не получаете "2.3423424666767E13", это просто визуальное представление числа, хранящегося в памяти. "Как вы распечатываете" и "что есть в памяти" - это две разные вещи. Пример выше показывает, как печатать число как float, что позволяет избежать получения научной нотации.
Ответ 7
Прежде всего, тот факт, что значение в базе данных является float, не означает, что он также подходит для Java float
. Float является коротким для с плавающей запятой, и существуют типы с плавающей запятой различных прецизионностей. Типы Java float
и double
- это типы с плавающей точкой различной точности. В базе данных оба называются float
. Поскольку double
имеет более высокую точность, чем float
, вероятно, лучше не бросать ваше значение в float
, потому что вы можете потерять точность.
Вы также можете использовать BigDecimal
, которые представляют собой номер произвольной точности.
Ответ 8
Используйте приведение типа dataType. Например:
// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;
Ура!
Замечания:
Целые числа представляют собой целые числа, например, 10, 400 или -5.
Числа с плавающей точкой (числа с плавающей запятой) имеют десятичные точки и десятичные разряды, например, 12,5 и 56,7786543.
Двойные числа - это определенный тип чисел с плавающей запятой, которые имеют большую точность, чем стандартные числа с плавающей запятой (это означает, что они точны с большим числом десятичных знаков).
Ответ 9
Это хороший способ сделать это:
'Double d = 0.5;'
'float f = d.floatValue();'
если у вас d как примитивный тип, просто добавьте одну строку:
double d = 0.5;
'Double D = Double.valueOf(d);'
'float f = D.floatValue();'
Ответ 10
Float.parseFloat(String.valueOf(your_number)