php 浮点型转成int类型,丢失精度问题的解决办法

这类问题,在支付代码段,常常遇到。

上述是string的299.40,经过intval()后变成了29939了。

肉眼看得见的数,在计算机中,存是这样的29939.99999999..

解决办法有2个

1.套层round()

intval(round($p*100))

2.先转成string

intval(strval($p*100))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想将一个浮点数的指数位和尾数位分别换成整数,可以使用 Python 内置的 struct 模块。 下面是一个示例代码,将一个浮点数的指数位和尾数位分别换成 int 型: ```python import struct x = 3.14 bytes_x = struct.pack('d', x) # 将浮点数换成 bytes 类型 hex_x = bytes_x.hex() # 将 bytes 类型换成十六进制字符串 sign = int(hex_x[0], 16) >> 7 # 获取符号位,右移 7 位 exponent = int(hex_x[0:2], 16) & 0x7ff # 获取指数位,取二进制与操作 mantissa = int(hex_x[2:], 16) # 获取尾数位 if exponent == 0x7ff: # 如果指数位全为 1,表示该浮点数为 NaN 或无穷大 if mantissa == 0: print('该浮点数为 NaN') else: print('该浮点数为无穷大') else: # 否则,根据指数位和尾数位计算浮点数的值 value = (-1) ** sign * (1 + mantissa / 2 ** 52) * 2 ** (exponent - 1023) print('该浮点数的值为', value) exponent_int = exponent - 1023 # 将指数位换为 int 型 mantissa_int = mantissa # 将尾数位换为 int 型 print('指数位的 int 值为', exponent_int) print('尾数位的 int 值为', mantissa_int) ``` 在上面的代码中,我们首先使用 struct.pack() 函数将浮点数换成 bytes 类型,然后将 bytes 类型换成十六进制字符串。接着,我们从十六进制字符串中获取符号位、指数位和尾数位,并根据它们计算浮点数的值。最后,我们将指数位和尾数位分别换成 int 型,并输出它们的值。 需要注意的是,上面的代码仅适用于 IEEE 754 标准的双精度浮点数。如果你需要处理其他类型的浮点数,需要根据相应的规范进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值