首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将1234567.1234的双值转换为java中的浮动值

将1234567.1234的双值转换为java中的浮动值
EN

Stack Overflow用户
提问于 2015-08-27 19:04:42
回答 4查看 3.3K关注 0票数 0

我正试图在java中将double转换为float。

代码语言:javascript
运行
复制
Double d = 1234567.1234;
Float f = d.floatValue();

我看到f的值是

代码语言:javascript
运行
复制
1234567.1

我不想打印一个字符串值的浮点。我只是想知道,在将double转换为float时,不丢失任何精度的最大位数是多少。我可以在java中显示8个以上的有效数字吗?

EN

回答 4

Stack Overflow用户

发布于 2015-08-27 19:40:15

float的精度约为7小数点,但由于浮子是以二进制形式存储的,这是一种近似。

要演示所述浮点值的实际精度,请尝试如下:

代码语言:javascript
运行
复制
double d = 1234567.1234;
float f = (float)d;
System.out.printf("%.9f%n", d);
System.out.printf("%.9f%n", Math.nextDown(f));
System.out.printf("%.9f%n", f);
System.out.printf("%.9f%n", Math.nextUp(f));

输出

代码语言:javascript
运行
复制
1234567.123400000
1234567.000000000
1234567.125000000
1234567.250000000

如您所见,对于这个数字,有效的十进制精度大约是1位小数位,或8位数字,但是如果您使用数字9876543.9876运行代码,您将得到:

代码语言:javascript
运行
复制
9876543.987600000
9876543.000000000
9876544.000000000
9876545.000000000

只有7位数的精确度。

票数 3
EN

Stack Overflow用户

发布于 2015-08-27 20:28:02

我只是想知道,在将double转换为float时,不丢失任何精度的最大位数是多少。

也许你没有意识到这一点,但是N位精度的概念已经是模棱两可。毫无疑问,你的意思是“基数为10的N位数字的精度”。但与人类不同的是,我们的电脑与基地2一起工作。

不可能在不丢失精度的情况下将每个数字从基数X转换到基数Y(保留的数字数量有限),例如,1/3的值在基3中完全准确地表示为"0.1“。在基数10中,它有无限多位数0.3333333333333.同样,基本10中通常完全可表示的数字,例如0.1,需要在基2中表示无限多个数字。另一方面,0.5 (基数10)可以精确地表示为0.1 (基数2)。

所以回到

我只是想知道,在将double转换为float时,不丢失任何精度的最大位数是多少。

答案是“这取决于价值”。常用的经验法则“浮点数大约有6到7位小数点精度”只是一种近似。它可以是更多或更少取决于价值。

在处理浮点时,相对精度的概念更有用,停止考虑“数字”,代之以相对误差。任何数字N(在范围内)都是可以表示的,误差最多为N/精度,精度是选择格式的尾数(例如,浮点数23 (+1),双精度52 (+1) )。因此,表示为浮点数的十进制数的最大逼近误差为N/ pow(2,24)。误差可能较小,甚至为零,但永远不会更大。

23+1来自于这样一种惯例,即浮点数字是按照选择的指数组织的,因此第一个尾数位总是1(只要有可能),因此不需要显式存储。物理存储的比特数,例如23,因此允许额外的一位精度。(有一种例外情况,即“只要有可能”就不适用,但让我们在这里忽略这一点)。

TL;博士:浮点数或双数没有固定的十进制数精度。

票数 2
EN

Stack Overflow用户

发布于 2015-08-28 06:57:05

这是一个简单的示例,支持不存在安全的十进制数的观点。

考虑0.1。

最近的IEEE 754 64位二进制浮点数具有精确的值0.1000000000000000055511151231257827021181583404541015625.。它将32位二进制浮点转换为0.10000000149011119384765625,比0.1远得多.

即使是一位重要的数字和一位小数位,也可能失去精确性。

除非你真的需要浮子的紧凑性,并且有非常宽松的精度要求,一般情况下最好坚持双倍。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32257543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档