2017-10-03 4 views
0

私はCでマイクロコントローラをプログラミングしていますが、コンパイラやチップは浮動小数点数を非常にうまく処理しないため、浮動小数点値を小数点以下を切り捨てて出力し、それを比例除算でスケールダウンし、モジュラスを使用して小数部分を見つけて表示します。ここに例があります: 番号25.0625で始まります。 10000を掛けて250625を得る。今はもうフロートはありません。今、私たちはこのような行を使用して、この表示するには:Cプログラミング:モジュラスは結果の先行ゼロを無視しますか?どうやって止めることができますか?

sprintf(buffer, "%li.%i", Temp/10000, abs(Temp % 10000)); 

だから我々は最初の/ 10000バックアウト25を取得し、その後、我々は% 10000によって0625を取得します。しかし、問題は次のとおりです。私のモジュラス結果は0625の先行ゼロを無視しているので、数値を連結して連結すると、25.0625の代わりに25.625になります。私はそこに常に先行ゼロがあると信じることはできないので、そこにゼロを詰め込むことは答えではなく、時にはいくつかの先行ゼロが存在する可能性があります。私の質問は、どうやって先行ゼロを排除してモジュラスを抑制するのですか?ありがとう。

+1

先頭のゼロは数値的に存在しない参照してください。 '%04i'を使用して整数を4桁の幅でフォーマットします。 – Ryan

+1

数字に先行ゼロはありません。数値だけです。 '%04d'形式を使って4桁で印刷することができます。 – Barmar

+0

'Temp = -123'では' sprintf(バッファ、 "%li。%i"、Temp/10000、abs(Temp%10000));は間違った出力です。 – chux

答えて

3

sprintfに先行するゼロの4桁のフィールドに数値を書式設定するように指示できます。

sprintf(buffer, "%li.%04d", Temp/10000, abs(Temp % 10000)); 

Printing leading 0's in C?

+0

また、 '%.4d'は同じ仕事をします。 '%04d'より優先されると主張する人もいます。 –

+0

@JonathanLeffler私はちょうど私がリンクしている質問への答えのいずれかでその推薦が表示されません。 – Barmar

+0

それは欠けているようです。私はもっ​​と先に進む前に、 "誰がいるのか..."という言葉を掘り下げたいと思う。 x-redは、整数/固定小数点演算ではなく、郵便番号に関するものです。 –

関連する問題