Python 将浮点数转换为任意基

Python 将浮点数转换为任意基,python,floating-point,floating-point-conversion,Python,Floating Point,Floating Point Conversion,在Python中,如果不使用Python内置的int和float,如何将由字符串表示的float转换为十进制,基数介于2到36之间? 意思是: 转换浮点数(“234.56”,基准)-->浮点数,或(“10AB”,基准)-->浮点数 如果浮点以.0结尾,则结果应为整数 将整数转换为任何基似乎不那么复杂,但我无法找到或找到任何浮点数的解决方案。我认为你的想法已经很好了。要实现它,首先需要一个可以将字符串转换为整数的字典。然后在小数点处将字符串一分为二。然后,您可以反转“before”字符串并遍历它,

在Python中,如果不使用Python内置的int和float,如何将由字符串表示的float转换为十进制,基数介于2到36之间? 意思是: 转换浮点数(“234.56”,基准)-->浮点数,或(“10AB”,基准)-->浮点数

如果浮点以.0结尾,则结果应为整数


将整数转换为任何基似乎不那么复杂,但我无法找到或找到任何浮点数的解决方案。

我认为你的想法已经很好了。要实现它,首先需要一个可以将字符串转换为整数的字典。然后在小数点处将字符串一分为二。然后,您可以反转“before”字符串并遍历它,将当前值的整数乘以当前索引的10,然后将所有这些值相加

然后,遍历“after”字符串,将当前值与负当前索引相乘,再次添加值

要将其转化为代码:

s2i = {"0": 0,
"1": 1,
"2": 2,
...
"Y": 34,
"Z": 35
}

def convert_float(s, base=10):
    ret = 0
    if "." not in s: bef = s
    else: bef, aft = s.split(".")
    for i in enumerate(reversed(bef)):
        integer = s2i[i[1]]
        if integer >= base: raise ValueError
        ret += base**i[0] * integer
    if "." not in s: return ret
    for i in enumerate(aft):
        integer = s2i[i[1]]
        if integer >= base: raise ValueError
        ret += base**-(i[0] + 1) * integer
    return ret

print convert_float("YF.1G90N", 36)

> 1239.04031674

一个浮点数如何用10以外的基数表示?这样的数字总是整数,而
int('10AB',base)
工作得很好。@MartijnPieters,0xff34.1a对我来说很有意义您自己尝试过什么吗?为什么不能使用
int
?内部浮点是二进制的,用非十进制表示它们在理论上没有问题。一种方法可能是找到小数点,将其删除,转换为整数,然后将基数乘以点位置的幂——本质上是分别转换尾数和指数。感谢@jazzpi的清晰解释!