字符串转int时,如何判断是否会溢出?

问题描述 投票:0回答:1

我正在尝试将字符串转换为 32 位 int,并且我想将小于 -2^31 的数字限制为 -2^31,将大于 2^31-1 的数字限制为 2^31-1。

这是我到目前为止的代码,但由于某种原因它不起作用。

import sys

if num > sys.maxsize:
   return 2147483647
elif num < -sys.maxsize - 1: 
   return -2147483648

如有任何帮助,我们将不胜感激,谢谢!

python casting overflow
1个回答
0
投票

如果您的约束是专门针对 32 位的,那么您不应该引用 sys.maxsize,因为这不会在 64 位环境中为您提供正确的值。

使用众所周知的常数更容易。

因此:

HI = 2147483647
LO = -2147483648

def convert(s):
    if (i := int(s)) > HI:
        return HI
    return LO if i < LO else i
© www.soinside.com 2019 - 2024. All rights reserved.