java 从double转换到float_在Java中从double转换为float

我建议将浮点类型最有效地视为表示值的范围。 0.1f显示为0.1而不是0.100000001490116119384765625的原因是它实际上代表从13421772.5 / 134217728到13421773.5 / 134217728(即从0.0999999977648258209228515625到0.1000000052154064178466796875)的数字范围;添加额外的数字表示数字大于0.100可能没有意义,也不会使用一串表示数字小于0.100的数字可能更大。

将double转换为float将选择float,其值范围包括double表示的双精度范围。请注意,虽然此操作是不可逆的,但操作的结果通常是算术正确的;唯一一次,它不是100%算术正确的,如果一个人正在施放浮动一个双精度,其范围正好在两个浮标之间的边界上。在那种情况下,系统会选择浮动的一侧或另一侧的双重范围;如果double实际上表示该范围的错误一侧的数字,则所得到的转换将略微不准确。

在实践中,上面提到的微小不精确几乎从不相关,因为浮点类型所代表的“值范围”实际上比上面指出的要大一些。对具有一定不确定性的两个数字执行计算(例如加法)将产生具有更多不确定性的结果,但系统将不会跟踪存在多少不确定性。尽管如此,除非一个人在浮动上执行数十次操作,或者对一次操作执行数千次操作,否则不确定性的数量通常会小到不用担心。

重要的是要注意,将float转换为double实际上比将double转换为float更危险,即使Java允许前者隐式没有警告而是对后者发出警告。将浮点数转换为double会导致系统选择其范围以浮点范围的中心为中心的double。这几乎总会产生一个值,其实际不确定性远远大于双精度数的典型值。例如,如果一个将0.1f转换为double,则得到的double将表示0.10000000149011611到0.10000000149011613范围内的数字,即使它应该代表的数字(十分之一)相对来说也不在该范围附近。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值