Подтвердить что ты не робот

Преобразование 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);
}
4b9b3361

Ответ 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)