基于wokwi仿真的arduino项目

https://wokwi.com/projects/368432912481597441
以上是我做的一个wokwi项目,第四个灰色按钮是计算器里的百分号功能,对应的是代码中的“percent()”函数,为什么调试的时候能显示正确结果(比如:33变成0.33),但运行的时候就不可以(33变成0.00)?

1.数据类型问题:请确保在percent()函数中使用的数据类型与预期相符。如果你使用整数进行计算,可能会导致结果被截断为零。例如,如果你使用整数除法进行百分比计算,结果将被截断为整数部分。
2.浮点数精度:如果你使用浮点数进行计算,请确定浮点数的精度设置正确。在某些编程语言中,默认的浮点数精度可能较低,可能导致结果被截断或舍入。

引用chatgpt内容作答:
在你的代码中,计算器的百分比功能在调试时显示正确结果,但在运行时显示不正确的原因可能是由于数据类型的问题。

在percent()函数中,你将current转换为float类型,并将其除以100。然后,你将结果存储回current变量中,并将其显示在LCD上。

然而,根据你的描述,当你运行代码时,结果显示为0.00,而不是预期的0.33。这可能是由于数据类型转换引起的精度丢失。

在将current转换为float类型时,可能发生了精度丢失,导致结果被截断为0.00。为了解决这个问题,你可以尝试使用double类型而不是float类型来存储百分比计算的结果。修改percent()函数中的以下行:

float currentValue = current.toFloat();

改为:

double currentValue = current.toDouble();

通过使用double类型,你将获得更高的精度,并且应该正确显示百分比计算的结果。运行代码时,它应该将33正确转换为0.33,并显示在LCD上。

在percent()函数中,你将current转换为浮点数,然后除以100并存储回current变量中。然而,由于你将current声明为String类型,而不是浮点数类型,这可能导致了问题。

我建议你修改percent()函数的实现,以确保正确的百分比计算和显示。你可以使用String类的构造函数来创建一个新的String对象,将百分比计算结果转换为字符串,并将其存储回current变量中。

以下是修改后的percent()函数的代码:

void percent() {
  if (current != "") {
    float currentValue = current.toFloat();
    currentValue /= 100.0;
    current = String(currentValue);
    lcd.setCursor(1, 1);
    lcd.print(current);
    lcd.setCursor(current.length() + 1, 1);
  }
}

这个修改只是更改了current变量的数据类型,以确保计算结果正确地显示为百分比值。如果问题仍然存在,可能是LCD显示的问题,你可以进一步检查LCD库和相关配置以确定问题的根本原因。

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您提供的信息,您在wokwi项目中添加了一个计算器的百分号功能,使用了代码中的"percent()"函数。在调试过程中,该功能显示了正确的结果(例如:33变成0.33),但在运行时却不起作用(33变成0.00)。这可能是由以下原因导致的:

  1. 代码逻辑问题:请检查"percent()"函数的代码逻辑是否正确。确保百分号计算的公式正确,并且数据类型的转换没有问题。在调试过程中可能使用了正确的数据或临时修改,但在运行时可能存在问题。
  2. 数据类型问题:百分号计算涉及到浮点数的处理。请确保在计算过程中使用了正确的数据类型,并进行适当的类型转换。可能在调试过程中使用了浮点数类型进行计算,但在运行时可能出现数据类型错误,导致结果不正确。
  3. 输入数据问题:请确认在运行时输入的数据是否与调试过程中相同。如果在运行时提供了不同的输入数据,可能会导致计算结果不同。
  4. wokwi仿真平台问题:有时候,在仿真平台上的调试结果可能与实际运行环境有所不同。仿真平台可能使用不同的编译器、模拟器或者计算规则,导致在调试时的结果与实际运行时的结果不一致。

解决这个问题的一些可能方案包括:

  1. 仔细检查代码逻辑,确保百分号计算的公式正确无误。
  2. 确认数据类型的正确使用,并进行必要的类型转换。
  3. 检查输入数据,确保在运行时提供了与调试过程相同的数据。
  4. 尝试在实际的Arduino硬件上运行代码,观察结果是否与仿真平台上的结果一致。
  5. 如果问题仍然存在,可以尝试在Arduino论坛或wokwi社区中提问,寻求其他开发者的帮助和建议。

请注意,具体的问题原因需要根据您的代码和运行环境进行更详细的分析。以上提供的是一般性的可能原因和解决方案。

代码没有把percent()函数放到loop()函数里调用?

可以参考下

使用 PERCENT_RANK 查找最高和最低百分点
您可以使用 PERCENT_RANK 在数据集中查找最高或最低的百分点。在以下示例中,查询会返回其薪水在数据集的最高的五个百分点之内的男雇员。

SELECT * 
FROM ( SELECT Surname, Salary, 
       PERCENT_RANK ( ) OVER ( ORDER BY Salary DESC ) "Rank"
       FROM Employees 
       WHERE Sex IN ( 'M' )  ) 
       AS DerivedTable ( Surname, Salary, Percent )
WHERE Percent < 0.05;