在 Java 中将 double 转换为 float
Convert double to float in Java
我遇到了将 double
转换为 float
的相关问题。实际上,我在数据库中存储了一个 float 类型,23423424666767
,但是当我们在下面的代码中从数据库中获取数据时,getInfoValueNumeric()
,它是 double
类型。我们得到的值是2.3423424666767E13
形式。
那么我们如何得到像23423424666767
这样的float
格式的数据呢?
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 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 为您提供了很多功能。
To answer your query on "How to convert 2.3423424666767E13 to
23423424666767"
您可以使用 decimal formatter 来格式化小数。
double d = 2.3423424666767E13;
DecimalFormat decimalFormat = new DecimalFormat("#");
System.out.println(decimalFormat.format(d));
输出:23423424666767
问题是,您的值无法以单精度浮点类型准确存储。证明:
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”,它只是存储在内存中的数字的直观表示。 "How you print out" 和 "what is in memory" 是两个截然不同的东西。上面的示例向您展示了如何将数字打印为浮点数,这避免了您得到的科学记数法。
从 double 转换为 float 将是一个收缩转换。来自 doc:
A narrowing primitive conversion may lose information about the
overall magnitude of a numeric value and may also lose precision and
range.
A narrowing primitive conversion from double to float is governed by
the IEEE 754 rounding rules (§4.2.4). This conversion can lose
precision, but also lose range, resulting in a float zero from a
nonzero double and a float infinity from a finite double. A double NaN
is converted to a float NaN and a double infinity is converted to the
same-signed float infinity.
所以这不是一个好主意。如果你仍然想要它,你可以这样做:
double d = 3.0;
float f = (float) d;
首先,数据库中的值是浮点数并不意味着它也适合Java float
。 Float是floating point的缩写,存在各种精度的浮点类型。 Java 类型 float
和 double
都是不同精度的浮点类型。在数据库中,两者都称为 FLOAT
。由于 double
比 float
具有更高的精度,因此 而不是 将您的值转换为 float
可能是更好的主意,因为您可能会丢失精度。
您也可以使用 BigDecimal
,它代表一个任意精度的数字。
Float.parseFloat(String.valueOf(your_number)
将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;
}
使用数据类型转换。例如:
// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;
干杯!
注:
整数是整数,例如10、400 或 -5。
浮点数(floats)是有小数点和小数位的,例如12.5、56.7786543。
双精度数是一种特殊类型的浮点数,比标准浮点数具有更高的精度(这意味着它们精确到更多的小数位数)。
这是一个很好的方法:
Double d = 0.5;
float f = d.floatValue();
如果您将 d 作为原始类型,只需添加一行:
double d = 0.5;
Double D = Double.valueOf(d);
float f = D.floatValue();
我遇到了将 double
转换为 float
的相关问题。实际上,我在数据库中存储了一个 float 类型,23423424666767
,但是当我们在下面的代码中从数据库中获取数据时,getInfoValueNumeric()
,它是 double
类型。我们得到的值是2.3423424666767E13
形式。
那么我们如何得到像23423424666767
这样的float
格式的数据呢?
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 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 为您提供了很多功能。
To answer your query on "How to convert 2.3423424666767E13 to 23423424666767"
您可以使用 decimal formatter 来格式化小数。
double d = 2.3423424666767E13;
DecimalFormat decimalFormat = new DecimalFormat("#");
System.out.println(decimalFormat.format(d));
输出:23423424666767
问题是,您的值无法以单精度浮点类型准确存储。证明:
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”,它只是存储在内存中的数字的直观表示。 "How you print out" 和 "what is in memory" 是两个截然不同的东西。上面的示例向您展示了如何将数字打印为浮点数,这避免了您得到的科学记数法。
从 double 转换为 float 将是一个收缩转换。来自 doc:
A narrowing primitive conversion may lose information about the overall magnitude of a numeric value and may also lose precision and range.
A narrowing primitive conversion from double to float is governed by the IEEE 754 rounding rules (§4.2.4). This conversion can lose precision, but also lose range, resulting in a float zero from a nonzero double and a float infinity from a finite double. A double NaN is converted to a float NaN and a double infinity is converted to the same-signed float infinity.
所以这不是一个好主意。如果你仍然想要它,你可以这样做:
double d = 3.0;
float f = (float) d;
首先,数据库中的值是浮点数并不意味着它也适合Java float
。 Float是floating point的缩写,存在各种精度的浮点类型。 Java 类型 float
和 double
都是不同精度的浮点类型。在数据库中,两者都称为 FLOAT
。由于 double
比 float
具有更高的精度,因此 而不是 将您的值转换为 float
可能是更好的主意,因为您可能会丢失精度。
您也可以使用 BigDecimal
,它代表一个任意精度的数字。
Float.parseFloat(String.valueOf(your_number)
将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;
}
使用数据类型转换。例如:
// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;
干杯!
注:
整数是整数,例如10、400 或 -5。
浮点数(floats)是有小数点和小数位的,例如12.5、56.7786543。
双精度数是一种特殊类型的浮点数,比标准浮点数具有更高的精度(这意味着它们精确到更多的小数位数)。
这是一个很好的方法:
Double d = 0.5;
float f = d.floatValue();
如果您将 d 作为原始类型,只需添加一行:
double d = 0.5;
Double D = Double.valueOf(d);
float f = D.floatValue();