下面给出测试代码及其输出。当我从数字值中获得浮点值时,精度就会丢失..谁能告诉我为什么这种行为以及如何处理呢?
public static void main(String[] args)
{
try
{
java.lang.Number numberVal = 676543.21;
float floatVal = numberVal.floatValue();
System.out.println("Number value : " + numberVal);
System.out.println("float value : " + floatVal);
System.out.println("Float.MAX_VALUE : " + Float.MAX_VALUE);
System.out.println("Is floatVal > Float.MAX_VALUE ? " + ( floatVal > Float.MAX_VALUE));
}catch(Exception e)
{
e.printStackTrace();
}
}
输出:
Number value : 676543.21
float value : 676543.2
Float.MAX_VALUE : 3.4028235E38
Is floatVal > Float.MAX_VALUE ? false
还为什么float值小于Float.MAX_VALUE?
我爱这些。但我会使其快速而轻松地进行。
浮点数和小数(也称为浮点数)也不会精确地保留在内存中。但我不想在这里涉及浮点精度与精度问题,我只将您指向一个链接-http: //www.cygnus-
software.com/papers/comparingfloats/comparingfloats.htm
至于您的另一个问题,莱姆说的是这样,因为浮子以科学计数法存储。
floatVal = 6.765432E6 = 6.7 * 10^6
MAX_VALUE = 3.4E38 = 3.4 * 10^38
MAX_VALUE比您的浮点数大32个数量级。随时在这里看看http://steve.hollasch.net/cgindex/coding/ieeefloat.html
几个月前,我花了很多时间比较和解决一些FP问题…
比较浮点数时,请尝试使用较小的增量。也许此链接会帮助您http://introcs.cs.princeton.edu/java/91float/
问题内容: 如何使用正则表达式从字符串中提取双精度值。 问题答案: 这是简单的方法。请勿将regex用于内置类型。
我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?
问题内容: 如何使用正则表达式从字符串中提取双精度值。 问题答案: 是简单的方法。请勿将regex用于内置类型。
问题内容: 是否有比浮点精度更好的数据类型? 问题答案: 小数数据类型 与基于硬件的二进制浮点数不同,十进制模块具有用户可更改的精度(默认为28位),可以与给定问题所需的精度一样大。 如果您对性能问题感到困扰,请查看GMPY
问题内容: 是否在任何地方都有Java库可以对IEEE 754半精度 数字执行计算或将其与双精度数字进行转换? 这些方法中的任何一种都是合适的: 将数字保持为半精度格式,并使用整数算术和位扭曲(如MicroFloat的单精度和双精度)进行计算 以单精度或双精度执行所有计算,转换成半精度以进行传输(在这种情况下,我需要经过良好测试的转换函数。) 编辑 :转换需要100%准确- 输入文件中 有 很多N
谢谢