在 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 类型 floatdouble 都是不同精度的浮点类型。在数据库中,两者都称为 FLOAT。由于 doublefloat 具有更高的精度,因此 而不是 将您的值转换为 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();