java中的浮点转换浮点值解析
当我这么做的时候
value = Float.parseFloat("5555998.558f");
System.out.println("Value: " + value);
它给我的结果是5555998.5
,而不是5555998.558
我正在使用变量值进行一些计算。我需要精确的值,即5555998.558
如何克服这个问题
你可以在下面搜索框中键入要查询的问题!
当我这么做的时候
value = Float.parseFloat("5555998.558f");
System.out.println("Value: " + value);
它给我的结果是5555998.5
,而不是5555998.558
我正在使用变量值进行一些计算。我需要精确的值,即5555998.558
如何克服这个问题
# 1 楼答案
这个高值的
float
值的精度只有0.5,所以Java将其解析为最接近的float
值,它可以=5555998.5
,这就是打印的结果要查看该量级上两个最接近的值之间的差异,请使用^{} (最后一位的单位):
这张照片
您可以使用
double
来获得更好的精度:这张照片
有趣的是,} 将} 国家:
Double.parseDouble
似乎并不介意结尾的f
^{String
转换为double
“由类Double的valueOf方法执行”。和^{这个方法将把
String
当作一个Java数值文本,Java支持它,并在末尾用f
表示浮点文本# 2 楼答案
你也可以这样做:
输出:
# 3 楼答案
BigDecimal
可能是精确十进制表示的最佳选择它是不可变的,所以你对它所做的每一个操作都会导致你创建一个新的
BigDecimal
实例,但它的精度也可能是你所需要的# 4 楼答案
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 浮点:浮点数据类型是单精度32位IEEE 754浮点。它的值范围超出了本文讨论的范围,但在Java语言规范的浮点类型、格式和值部分中有详细说明。与字节和短字符的建议一样,如果需要在大量浮点数数组中节省内存,请使用浮点(而不是双精度)。此数据类型不应用于精确的值,例如货币。为此,您需要使用java。数学改为使用BigDecimal类。数字和字符串包括BigDecimal和Java平台提供的其他有用类
所以使用BigDecimal,你就不会有问题了