2016-04-09 12 views
1

それをキャストどんなにint型として扱われているように見える: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 - 1183248337.1150 

私は変数の追加(float)や(double)などのキャストを試みたことがありますが、何も問題はないようですk。何か案は?

+0

@FiddlingBits私は 'double unixd = timenow.unixtime()/ 1.234f;'も試しました。残念ながら、同じことが出力されます。 – Mobiliseme

+0

'unixd'を' float'に変更しようとしています: 'float unixd = ...'。 –

+0

@FiddlingBitsありがとうございました。私はちょうどこれも試みました、残念ながら運はありません。 '= timenow.unixtime()/ 1.234fをunixdフロート;' 出力:それはライブラリRTClib内、まったく助けている場合 '1460130626'と' 1183250176.0000' – Mobiliseme

答えて

1

小数なしの1183248337には31ビットが必要です。

double/floatのAVRは32ビットです。 タイプには大きすぎる番号を使用しています。

uint64_tを使用して固定幅演算を使用できます。数値を整数(1183248337.1150の代わりに11832483371150)で表現し、次に/分数を除算して印刷用の部分を抽出します。

+0

としてキャストされありがとう、これを試してみましょう。私はObjective Cでミリ秒単位で処理するときに同様の問題に遭遇したので、これが当てはまると思いました。これをテストしてお返しします。 – Mobiliseme

+0

注:ビット数nを計算し、部分をlongまたはintにキャストしたら(64ビットの数値は扱えません)、64ビット数値は印刷できません –

関連する問題