我遇到了与将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);
}
答案 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类型float
和double
都是不同精度的浮点类型。在数据库中,两者都称为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)