String Arduino问题:浮点数的字符串添加两个零,而不是正确的整数

String Arduino问题:浮点数的字符串添加两个零,而不是正确的整数,string,floating-point,arduino,String,Floating Point,Arduino,代码段: Serial.println(sensorString); //so you can see the captured string char carray[sensorString.length() + 1]; //determine size of the array Serial.println(sizeof(carray)); sensorString.toCharArray(carray, sizeof(carray)); //put sensorString into a

代码段:

Serial.println(sensorString);  //so you can see the captured string
char carray[sensorString.length() + 1]; //determine size of the array
Serial.println(sizeof(carray));
sensorString.toCharArray(carray, sizeof(carray)); //put sensorString into an array
float sensorStringFloat = atoi(carray); //convert the array into an Integer

Serial.println(sensorStringFloat);
Serial.println(sensorStringFloat)打印出5.00,而不是正确的浮点值5.33。这是为什么?我如何解决这个问题?最后,我想谈谈:

aJson.addNumberToObject(sensor, "ph", sensorStringFloat);

您应该传递另一个定义格式的参数,在这种情况下,它是浮点后面的位数

Serial.println(sensorString,2);

您应该传递另一个定义格式的参数,在这种情况下,它是浮点后面的位数

Serial.println(sensorString,2);

atoi将ASCII格式的数字转换为整数。该行上的注释还表示它将转换为整数。所以你得到了一个整数结果,5。若要转换为浮点,请考虑使用ATOF。(请注意,“f”代表浮点,而不是“float”。atof返回双精度。)

atoi将ASCII格式的数字转换为整数。该行上的注释还表示它将转换为整数。所以你得到了一个整数结果,5。若要转换为浮点,请考虑使用ATOF。(请注意,“f”代表浮点,而不是“float”。atof返回一个double。)

String temp=String(_float,0)

说float x

使用转换为字符串
String _temp=String(x,0)

第二个参数0。。。说我不想要尾随的零

注意:但这仅适用于整数。 这个解决方案对…不起作用。。。1.24
您只会得到1。

String temp=String(\u float,0)

说float x

使用转换为字符串
String _temp=String(x,0)

第二个参数0。。。说我不想要尾随的零

注意:但这仅适用于整数。 这个解决方案对…不起作用。。。1.24
你只会得到1个。

我访问了arduino.cc并继续深入研究println。非常感谢。我访问了arduino.cc并继续深入研究println。非常感谢。我应该将sensorStringFloat前面的浮动更改为double吗?编辑:我尝试了float和double,得到了相同的值。我现在遇到了另一个小问题:aJson.addNumberToObject(sensor,“ph”,sensorStringFloat);返回:{“name”:“SensorBoardOne”,“Sensor”:{“ph”:5.33000}}有没有办法像println(someFloat,2)那样最多保存两位小数;?您可以使用浮点,只要它包含足够的任务精度我不知道你的第二个问题是什么;您显示了一个返回值,但没有指出它有什么问题或您期望的结果我不知道你保留小数点后两位是什么意思。一旦你将值存储在一个浮点数中,你就可以做你想做的事情,保存它,打印它,计算它。请注意,float和double都不存储“小数位”。通常的实现是二进制的,而不是十进制的;float或double包含一个24或53位的值乘以2的幂和一个符号。“问题”在技术上不是一个问题。sensorStringFloat返回5.33000。请注意结尾是000。我应该问一个更好的问题,比如,我如何截断或修剪最后3000个?我宁愿使用5.33而不是5.33000。此外,jSON字符串{“name”:“SensorBoardOne”,“Sensor”:{“ph”:5.33000}}将被发送到一个c#应用程序,该应用程序读取/发送传入/传出串行通信。格式化这类输出是一个单独的问题,对于您使用的语言和工具,我不准备回答这个问题。我建议你单独问一个问题。但是,请记住,浮子不会存储5.33;它存储的数据接近5.33,可能是0x1.551eb8p+2,即5.329992937060546875。如果您总是希望将其格式化为两位小数,那么这可能很简单。但是如果你想知道它有多少个尾随的零,并把它们去掉,这是一个问题,因为它不是5.33,尾随的零,而是一个不同的数字。好的,格式化是我想要完成的全部。读了大约一个小时的书后,我确实对浮子有了基本的了解。我不明白的是,为什么它返回一个常量,在浮点的末尾有三个零。传感器可能再次返回5.33和4.96等。当我将浮点传递到:{“name”:“SensorBoardOne”,“Sensor”:{“ph”:4.96000}时,后面的三个零就在那里。它们是否附加在某个点上?谢谢你的帮助。我将为我的格式问题创建另一个问题。我是否应该将sensorStringFloat前面的float更改为double?编辑:我尝试了float和double,得到了相同的值。我现在遇到了另一个小问题:aJson.addNumberToObject(sensor,“ph”,sensorStringFloat);返回:{“name”:“SensorBoardOne”,“Sensor”:{“ph”:5.33000}}有没有办法像println(someFloat,2)那样最多保存两位小数;?您可以使用浮点,只要它包含足够的任务精度我不知道你的第二个问题是什么;您显示了一个返回值,但没有指出它有什么问题或您期望的结果我不知道你保留小数点后两位是什么意思。一旦你将值存储在一个浮点数中,你就可以做你想做的事情,保存它,打印它,计算它。请注意,float和double都不存储“小数位”。通常的实现是二进制的,而不是十进制的;float或double包含一个24或53位的值乘以2的幂和一个符号。“问题”在技术上不是一个问题。sensorStringFloat返回5.33000。请注意结尾是000。我应该问一个更好的问题,比如,我如何截断或修剪最后3000个?我宁愿使用5.33而不是5.33000。此外,jSON字符串{“name”:“SensorBoardOne”,“Sensor”:{“ph”:5.33000}}将被发送到一个c#应用程序,该应用程序读取/发送传入/传出串行通信。格式化这类输出是一个单独的问题,我没有准备