以 10 为底的 int() 的无效文字:'328.94'(将字节转换为 int() 时)

invalid literal for int() with base 10: '328.94'(while converting bytes to int())

这是我的代码:

import serial

print('Arduino is setting up')
# Setting up the Arduino board

arduinoSerialData = serial.Serial('com4', 9600)
while True:
    if arduinoSerialData.inWaiting() > 1:
        myData = arduinoSerialData.readline()
        myData = str(myData)
        myData = myData.replace("b'", '')
        myData = myData.replace("\r\n'", '')
        myData1=myData
        if myData1.find("a"):
            myData1= myData1.replace("a",str(0))
            if int(myData1)<100:
                print(myData)

这段代码的作用是从连接到 arduino 板上的超声波传感器导入数据,并打印它。myData 最初以字节为单位,所以我将其转换为字符串,但我似乎无法将其转换为 int。当我尝试上面的代码时,我尝试了这段代码,我得到了 error.Anyone 知道如何解决这个问题吗?谢谢!

如果给int()一个字符串,它需要是一个整数。如果你有一个non-integer,你可以先用float()转换它,然后int()把那个浮点值转换成一个整数,根据以下成绩单:

>>> print(int("328.94"))               # Will not work.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '328.94'

>>> print(float("328.94"))             # Convert string to float.
328.94

>>> print(int(float("328.94")))        # Convert string to float to int.
328

>>> print(int(float("328.94") + 0.5))  # Same but rounded.
329

最后一个是一个选项,如果您希望它四舍五入到最接近的整数,而不是截断。

看来您的字节到字符串的转换不正确。为什么不试试这个:

1. Bytes to string conversion:
   mydata  = myData.decode("utf-8")

2. Eliminatinf trailing newline characters:
   myData = myData.strip("\r\n")

确保生成的字符串仅包含要转换为 int 的数字字符。你可以做这个检查:

if mydata1.isdigit() and int(mydata1) < 100:
    <your code>

如果你的字符串包含浮点数,那么你可以这样做:

if mydata1.replace(".", "").isdigit() and int(float(mydata1)) < 100: