Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我如何在不使用Python内置的ins和float的情况下,将Python中由字符串表示的float转换为2到36之间的十进制数?
含义:
convert_float(“ 234.56”,基本)->浮点数,或(“ 10AB”,基本)->浮点数
如果浮点数以.0结尾,则结果应为整数。
将整数转换为任何基数似乎要简单得多,但是我无法提出或为浮点数找到任何解决方案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我如何在不使用Python内置的ins和float的情况下,将Python中由字符串表示的float转换为2到36之间的十进制数?
含义:
convert_float(“ 234.56”,基本)->浮点数,或(“ 10AB”,基本)->浮点数
如果浮点数以.0结尾,则结果应为整数。
将整数转换为任何基数似乎要简单得多,但是我无法提出或为浮点数找到任何解决方案。
最佳答案
我认为您的想法已经很好。要实现它,您首先需要一个可以将字符串转换为整数的字典。然后,您需要将小数点后的字符串一分为二。然后,您可以反转“ before”字符串并对其进行遍历,将当前值的整数乘以10到当前索引,然后将所有这些值加起来。
然后,遍历“之后”字符串,并将当前值乘以负的当前索引,然后再次将其相加。
将其放入代码中:
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