将浮点数转换为任何基数

时间:2013-11-24 00:35:08

标签: python floating-point floating-point-conversion

我如何将一个由字符串表示的float转换为Python中的2到36之间的小数,而不使用Python内置的int int和float? 含义: convert_float(“234.56”,base) - > float,或(“10AB”,base) - >浮

如果float以.0结尾,结果应为整数。

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

1 个答案:

答案 0 :(得分:2)

我认为你的想法已经非常好了。要实现它,首先需要一个可以将字符串转换为整数的字典。那么你想要将你的字符串分成两个小数点。然后,你可以反转你的“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