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)。这可能是由以下原因导致的:
解决这个问题的一些可能方案包括:
请注意,具体的问题原因需要根据您的代码和运行环境进行更详细的分析。以上提供的是一般性的可能原因和解决方案。
代码没有把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;