C 无论我如何施法,Arduino DateTime似乎都被视为int
问题主要在于:C 无论我如何施法,Arduino DateTime似乎都被视为int,c,arduino,C,Arduino,问题主要在于: DateTime timenow = RTC.now(); Serial.println(timenow.unixtime()); double unixd = timenow.unixtime()/1.234; Serial.println(unixd,4); 产出如下: //unixtime - 1460128448 //unixd - 1183248384.0000 应在何时输出: //unixtime - 1460128448 //unixd - 1183
DateTime timenow = RTC.now();
Serial.println(timenow.unixtime());
double unixd = timenow.unixtime()/1.234;
Serial.println(unixd,4);
产出如下:
//unixtime - 1460128448
//unixd - 1183248384.0000
应在何时输出:
//unixtime - 1460128448
//unixd - 1183248337.1150
我尝试过以不同的方式来转换变量,比如添加(float)或(double)或其他什么,但似乎没有任何效果。有什么想法吗?没有小数的数字
1183248337
需要31位
AVR上的double
/float
为32位。
您只是使用了一个对于该类型来说太大的数字
您可以使用
uint64\u t
使用固定宽度算法。将您的数字表示为一个整数(11832483371150而不是1183248337.1150),然后进行除法/减法以提取要打印的部分。@FiddlingBits我也尝试了double unixd=timenow.unixtime()/1.234f
不幸的是,它输出相同的东西。尝试将unixd
更改为float
:float unixd=…
@FiddlingBits谢谢你。我也试过了,可惜运气不好float unixd=timenow.unixtime()/1.234f代码>输出:1460130626
和1183250176.0000
如果有帮助,在库RTClib中,unixtime被强制转换为uint32\t
谢谢,将尝试此操作。我想可能是这样的,因为我在处理目标C中的毫秒时遇到了类似的问题。我将对此进行测试并返回给您。注意:一旦您计算了位n个片段,您就无法打印64位数字(未处理),请将部分转换为long或int(无论它适合什么)