C Arduino Uno上我的双变量的输出值不正确

C Arduino Uno上我的双变量的输出值不正确,c,arduino,C,Arduino,我使用此代码测试打印双变量时是否正确显示输出: double t = (0.8*0.8*(10^5)*599*(10^-6)*1388.888889)/(287*(25+273)*14.7*3*(10^-3)*4); Serial.println(t); 但是我在串行端口上的输出是4.03而不是3.52 我正在使用Arduino UNO和Arduino C语言 我的代码有什么问题 我怎样才能解决这个问题 C++、JavaScript、java:< /P> 数字10^5必须在程序中表示为1e

我使用此代码测试打印双变量时是否正确显示输出:

double t = (0.8*0.8*(10^5)*599*(10^-6)*1388.888889)/(287*(25+273)*14.7*3*(10^-3)*4);
Serial.println(t); 
但是我在串行端口上的输出是4.03而不是3.52

我正在使用Arduino UNO和Arduino C语言

我的代码有什么问题

我怎样才能解决这个问题

<> C++、JavaScript、java:< /P> 数字10^5必须在程序中表示为1e5

编号10^-6为1e-6

使用“^”强制程序执行逐位运算10^5=(10)^(5)

见:

解决方案

改变

double t = (0.8*0.8*(10^5)*599*(10^-6)*1388.888889)/(287*(25+273)*14.7*3*(10^-3)*4);
致:

现在您得到了正确的结果:

t = 3.5292104651726235
arduino上的int的范围非常有限:32767到-32768。 长度为2147483647到-2147483648

避免混合int和double以避免舍入错误

仅使用double或您可以使用cast:

 double d = (double)(0.8*0.8*(1e5)*(double)599*(1e-6)*1388.888889)/(((double)287)*((double)(‌​25+273))*((14.7*((double)3)))*(1e-3)*(double)4);
关于Arduino的注记

Serial.print(1.23456); //gives "1.23"
若要获取更多数字,请将双变量转换为字符串并打印字符串

例如:

double num = (double)(0.8*0.8*(1e5)*(double)599*(1e-6)*1388.888889)/(((double)287)*((double)(25+273))*((14.7*((double)3)))*(1e-3)*(double)4);
char output[50];

snprintf(output, 50, "%f", num);

Serial.print(output); // should give you at least 3.529210

您知道
^
是位异或运算符吗?您使用哪种语言?在C中,我刚刚检查:
double d=(0.8*0.8*(1e5)*599*(1e-6)*1388.88889)/(287*(25+273)*14.7*3*(1e-3)*4);printf(“*程序结束**%f\n”,d)值是:
3.529210
我正在使用arduino c语言,但当我用java尝试你的代码时,它可以工作,但我希望它在arduino上用于硬件purpose@mamdouhabdelfatah当我使用计算器时(我在Mac电脑上使用聚光灯)它也给了我3.529210我知道你的代码是正确的,但我认为arduino c语言有一些东西different@mamdouhabdelfataharduino上的int的范围非常有限:32767到-32768。long是2147483647到-2147483648,请避免混合int和double。只使用double或您可以使用cast:
double d=(double)(0.8*0.8*(1e5)*(double)599*(1e-6)*1388.88889 9/((double)287)*((double)(25+273))*((14.7*((double)3))*(1e-3)*(double)4)如果效果更好,请告诉我。
double num = (double)(0.8*0.8*(1e5)*(double)599*(1e-6)*1388.888889)/(((double)287)*((double)(25+273))*((14.7*((double)3)))*(1e-3)*(double)4);
char output[50];

snprintf(output, 50, "%f", num);

Serial.print(output); // should give you at least 3.529210