将浮点值相乘的问题

2024-10-01 13:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,因此感谢您的帮助! 我正在写一个简单的代码来读取GPS数据并打印速度值。 gps发送的连续文本行如下所示:

$GNRMC,055945.00,A,3509.40388,N,10642.56412,W,0.080,,060321,,,D*72
$GNVTG,,T,,M,0.080,N,0.148,K,D*3D
$GNGGA,055945.00,3509.40388,N,10642.56412,W,2,12,0.64,1581.1,M,-23.9,M,,0000*4E
$GNGSA,A,3,29,05,18,15,13,20,23,25,51,46,26,16,1.20,0.64,1.02*1E
$GNGSA,A,3,65,87,88,72,66,79,81,,,,,,1.20,0.64,1.02*10

我的代码当前使用if语句查找正确的行和正确的值:

import serial
import time

gps = serial.Serial("/dev/serial0", baudrate = 9600)

while True:
       line = gps.readline()
       data = line.decode().split(",")
       if data[0] == "$GNRMC":
               if data[2] == "A":
                       if data[4] == "N":
                               if data[6] =="W":
                                       knotdata = data[7]
                                       mphdata = knotdata * 1.15
                                       print(mphdata)

但是,我得到以下错误:

Traceback (most recent call last):
File "txgpsreadconv.py", line 15, in <module>
   mphdata = knotdata * 1.15
TypeError: can't multiply sequence by non-int of type 'float'

我尝试了许多不同的方法来纠正这个问题,但都没有成功。我相信解决方案很简单,我只是没有足够的经验来解决它,所以非常感谢您的帮助


Tags: 数据代码importdataiflineserial速度
2条回答

回溯表明knotdata是一个序列,它不是可以与浮点数相乘的数据类型

实际上,您试图将表示数值的字符串(而不是值本身)相乘,因此您应该在操作之前执行强制转换:

knotdata = float(data[7])

您还可以改进if语句的结构,如下所示:

if data[0:8:2] == ["$GRNMC", "A", "N", "W"]:
    print(float(data[7]) * 1.15)

由于data[7]是一个浮点变量,因此可以使用类型转换float

mphdata = float(knotdata) * 1.15

相关问题 更多 >