在Java中将double转换为float

时间:2015-09-29 07:09:42

标签: java double floating

我遇到了与将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);
}

10 个答案:

答案 0 :(得分:138)

将你的双重投射到浮动。

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

答案 1 :(得分:18)

我建议你以BigDecimal类型检索存储在数据库中的值:

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

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

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

BigDecimal为您提供了许多功能。

答案 2 :(得分:9)

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;
}

答案 3 :(得分:3)

  

回答您关于"如何将2.3423424666767E13转换为的查询   23423424666767"

您可以使用decimal formatter格式化十进制数字。

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

输出:23423424666767

答案 4 :(得分:1)

从double转换为float将是一个缩小的转换。来自doc

  

缩小的原始转换可能会丢失有关的信息   数值的整体幅度,也可能失去精度   范围。

     

从double到float的缩小基元转换由   IEEE 754舍入规则(§4.2.4)。这种转换可能会失败   精度,但也失去范围,导致从零浮动零   非零双精度和有限双精度浮点无穷大。双NaN   转换为浮点数NaN,双无穷大转换为   同名的浮点无穷大。

所以这不是一个好主意。如果你仍然想要它,你可以这样做:

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

答案 5 :(得分:0)

问题是,您的值无法准确存储在单精度浮点类型中。证明:

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",它只是存储在内存中的数字的直观表示。 "你如何打印"和#34;记忆中的内容"有两个不同的东西。上面的例子显示了如何将数字打印为float,这避免了你得到的科学记数法。

答案 6 :(得分:0)

首先,数据库中的值是float的事实并不意味着它也适合Java float。 Float是浮点的缩写,存在各种精度的浮点类型。 Java类型floatdouble都是不同精度的浮点类型。在数据库中,两者都称为FLOAT。由于double的精度高于float,因此将值{em> 放到float可能是个更好的主意,因为您可能会失去精度。< / p>

您也可以使用BigDecimal,它代表一个任意精度的数字。

答案 7 :(得分:0)

使用dataType强制转换。例如:

// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;

干杯!

注意:

整数是整数,例如10、400或-5。

浮点数(浮点数)具有小数点和小数位,例如12.5和56.7786543。

双精度数是一种特殊类型的浮点数,其精度比标准浮点数高(这意味着它们可以精确到小数点后的位数)。

答案 8 :(得分:0)

这是一种不错的方法:

`Double d = 0.5;`
`float f = d.floatValue();`

如果您将d作为基本类型,只需添加一行:

double d = 0.5;
`Double D = Double.valueOf(d);`
`float f = D.floatValue();`

答案 9 :(得分:-1)

Float.parseFloat(将String.valueOf(your_number)