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