Преобразование double в float в Java

пример:преобразовать double в float

я столкнулся с проблемой, связанной с преобразованием double to float. На самом деле, я храню тип 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);
}

подробнее: преобразовать double в float в Java

8 ответов


просто бросьте своего двойника на поплавок.

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

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

BigDecimal number = new BigDecimal("2.3423424666767E13");

int myInt = number.intValue();
double myDouble = number.doubleValue();

// your purpose
float myFloat = number.floatValue();

BigDecimal предоставить вам много функциональных возможностей.


преобразование Double to Float

public static Float convertToFloat(Double doubleValue) {
    return doubleValue == null ? null : doubleValue.floatValue();
}

преобразование double до Float

public static Float convertToFloat(double doubleValue) {
    return (float) doubleValue;
}

чтобы ответить на ваш запрос "Как конвертировать 2.3423424666767E13 в 23423424666767"

можно использовать десятичное форматирования для форматирования десятичных чисел.

     double d = 2.3423424666767E13;
     DecimalFormat decimalFormat = new DecimalFormat("#");
     System.out.println(decimalFormat.format(d));

выход : 23423424666767


преобразование из double в float будет сужающим преобразованием. От doc:

сужающееся примитивное преобразование может потерять информацию о общая величина числового значения и может также потерять точность и диапазон.

сужающееся примитивное преобразование из double в float управляется правила округления IEEE 754 (§4.2.4). Это преобразование может потерять точность, но также теряет ряд, приводящ к в поплавке нул от a ненулевой двойник и плавающая бесконечность от конечного двойника. Двойной NaN преобразуется в float NaN, а двойная бесконечность преобразуется в однотипный поплавок infinity.

Так это не очень хорошая идея. Если вы все еще хотите, вы можете сделать это так:

double d = 3.0;
float f = (float) d;

проблема в том, что ваше значение не может быть точно сохранено в одном типе с плавающей запятой точности. Доказательство:

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, что позволяет избежать научной нотации, которую вы получали.


прежде всего, тот факт, что значение в базе данных является float, не означает, что оно также вписывается в Java float. Float-это сокращение от с плавающей точкой, и типы с плавающей точкой различной точности. Типы Java float и double оба с плавающей запятой различной точности. В базе данных оба называются FLOAT. С double имеет более высокую точность, чем float, Это, вероятно, лучшая идея не отдать свой значение float, потому что вы можете потерять точность.

вы также можете использовать BigDecimal, которые представляют собой число произвольной точности.


поплавок.parseFloat (String.valueOf (your_number)