在不使用 Python 内置 int 和 float 的情况下,如何将由字符串表示的浮点数转换为 Python 中 2 到 36 之间的小数?含义: convert_float("234.56", base) --> float, or ("10AB", base) --> float
如果浮点数以 .0 结尾,则结果应为整数。
将整数转换为任何基数似乎要简单得多,但是我无法为浮点数提出或找到任何解决方案。
在不使用 Python 内置 int 和 float 的情况下,如何将由字符串表示的浮点数转换为 Python 中 2 到 36 之间的小数?含义: convert_float("234.56", base) --> float, or ("10AB", base) --> float
如果浮点数以 .0 结尾,则结果应为整数。
将整数转换为任何基数似乎要简单得多,但是我无法为浮点数提出或找到任何解决方案。
我觉得你的想法已经很不错了。要实现它,您首先需要一个可以将字符串转换为整数的字典。然后你想在小数点处将你的字符串分成两部分。然后,您可以反转您的“之前”字符串并遍历它,将当前值的整数乘以 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