字符串转负数失败:为何无法识别字符串中的负号?
问题原因及解决办法
核心问题是字符编码不一致:你字符串里的负号不是普通的键盘减号(ASCII U+002D),而是Unicode标准的负号(U+2212,视觉上和减号几乎一样,但编码完全不同)。
验证差异
你可以打印字符的Unicode编码来确认:
text = "−4/−13" text_split = text.split("/")[0] # 打印第一个字符的Unicode编码 print(ord(text_split[0])) # 输出8722,对应U+2212 print(ord("-")) # 输出45,对应普通减号U+002D
你用text_split.find("-")查找的是U+002D的普通减号,自然匹配不到U+2212的负号,所以返回-1。
解决办法
有两种简单的处理方式:
- 直接转换(推荐):Python的
float()函数本身可以识别Unicode负号,不需要手动拆分处理负号:
text = "−4/−13" negative_number = float(text.split("/")[0]) print(negative_number) # 直接输出-4.0
- 统一字符编码:把所有Unicode负号替换成普通减号,再用你原来的逻辑处理:
text = "−4/−13" # 替换Unicode负号为普通减号 text = text.replace("−", "-") text_split = text.split("/")[0] print(text_split.find("-")) # 现在能找到,输出0 negative_number = float(text_split[1:])*(-1) print(negative_number) # 输出-4.0
内容的提问来源于stack exchange,提问作者neural science
相关产品推荐
相关产品推荐

