如何将值为0.9533的浮点数转换为整数9553?
问题描述
我有一个值为0.9533的float变量,如何将其转换为int变量,使值变为9533?(注:原问题中写的9553应为笔误)
我的代码如下:
a = ((i.left + i.right) / 2) a = ("{:.4f}".format(a)) # 获取a: float = 0.9533 print(f"Result 1: {a}") b = int(a * 10000) # 获取b: int print(f"Result 2: {b}")
运行后出现错误:
Result 1: 0.9533 ValueError: invalid literal for int() with base 10: '0.95330.95330...95330'
问题原因
"{:.4f}".format(a)执行后,变量a的类型从float变成了字符串。字符串执行乘法操作时,会重复自身内容,比如"0.9533" * 10000会生成一串重复的0.9533拼接字符串,这种格式的字符串无法被int()解析,因此抛出ValueError。
解决方案
提供两种可行的修正方案:
方案一:直接对float值操作(推荐)
跳过转字符串的步骤,直接对原始float值先乘10000,再转int。考虑到浮点数精度问题,建议用round()做四舍五入处理:a = ((i.left + i.right) / 2) b = int(round(a * 10000)) print(f"Result 2: {b}")方案二:若需保留字符串格式化步骤
先把格式化后的字符串转回float,再执行乘法和转int操作:a = ((i.left + i.right) / 2) a_formatted = "{:.4f}".format(a) print(f"Result 1: {a_formatted}") b = int(float(a_formatted) * 10000) print(f"Result 2: {b}")
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

