在Java中将double转换为float

Sit*_*nsu 56 java double floating

我正面临与转换double为相关的问题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);
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ock 151

只需将你的双倍投入浮动.

double d = getInfoValueNumeric();
float f = (float)d;
Run Code Online (Sandbox Code Playgroud)

另请注意,基元类型不能存储无限的数字集:

float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e–308 to 1.7e+308
Run Code Online (Sandbox Code Playgroud)

  • 最后有人回答了实际问题:) +1(好吧,也是akhil_mittal的) (3认同)
  • @JimmyKane确保使用原始类型"float"和"double"而不是对象类型"Float","Double". (3认同)

ant*_*dvr 23

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

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

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

// your purpose
float myFloat = number.floatValue();
Run Code Online (Sandbox Code Playgroud)

BigDecimal为您提供了许多功能.

  • 如果有人传递的值不是String,建议使用_BigDecimal.valueOf()_而不是_new BigDecimal()_.见[https://dev.eclipse.org/sonar/rules/show/squid:S2111](https://dev.eclipse.org/sonar/rules/show/squid:S2111) (4认同)

Pha*_*inh 12

转换DoubleFloat

public static Float convertToFloat(Double doubleValue) {
    return doubleValue == null ? null : doubleValue.floatValue();
}
Run Code Online (Sandbox Code Playgroud)

转换doubleFloat

public static Float convertToFloat(double doubleValue) {
    return (float) doubleValue;
}
Run Code Online (Sandbox Code Playgroud)


小智 12

这是一个很好的方法:

Double d = 0.5;
float f = d.floatValue();
Run Code Online (Sandbox Code Playgroud)

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

double d = 0.5;
Double D = Double.valueOf(d);
float f = D.floatValue();
Run Code Online (Sandbox Code Playgroud)


i_a*_*ero 5

从 double 转换为 float 将是一个缩小转换。来自文档

\n\n
\n

缩小基元转换可能会丢失有关数值总体大小的信息,并且还可能会丢失精度和范围。

\n\n

从 double 到 float 的缩小基元转换受 IEEE 754 舍入规则 (\xc2\xa74.2.4) 控制。此转换可能会丢失\n 精度,而且还会丢失范围,从而导致非零双精度浮点数变为浮点零,而有限双精度浮点数变为浮点数无穷大。双精度 NaN\n 会转换为浮点 NaN,双精度无穷大会转换为同符号浮点无穷大。

\n
\n\n

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

\n\n
double d = 3.0;\nfloat f = (float) d;\n
Run Code Online (Sandbox Code Playgroud)\n