python数字精度自动变化_确定Python中特定数字的精度和比例

获取小数点左侧的位数很容易:

int(log10(x))+1

由于浮点值固有的不准确性,小数点右边的位数比较棘手.我还需要几分钟来计算出那一个.

编辑:基于这个原则,这是完整的代码.

import math

def precision_and_scale(x):

max_digits = 14

int_part = int(abs(x))

magnitude = 1 if int_part == 0 else int(math.log10(int_part)) + 1

if magnitude >= max_digits:

return (magnitude, 0)

frac_part = abs(x) - int_part

multiplier = 10 ** (max_digits - magnitude)

frac_digits = multiplier + int(multiplier * frac_part + 0.5)

while frac_digits % 10 == 0:

frac_digits /= 10

scale = int(math.log10(frac_digits))

return (magnitude + scale, scale)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值