0

ここでこの式を見つけました:

podrucje[i][j] = floorf(podrucje[i][j]  * 100 + 0.5)/100;

どこpodrucje[][]で float 行列です。floorfは正しい値 ( desired * 100) を返しますが、問題は にあり/100ます。たとえば、私が持っている場合49.599998floorf戻り値4960.000で割った後、100結果は再び49.599998です。

問題はどこだ?

印刷中に丸めることができることはわかっていますが、このマトリックスを Excel で使用して範囲に変換するので、表現に影響を与えることはできません。

4

2 に答える 2

3

ほとんどの 10 進数は、浮動小数点として正確に表現できません。

おそらく、それらを整数として保存するか、人間が目に見えるものに変換するときに丸めを行う必要があります(つまり、数値を出力します)。

この数値をさらに計算するために使用し、最初に四捨五入する必要がある場合は、別の表現を使用してください。

于 2012-06-13T10:37:01.017 に答える
1

これは、base-10 ではない浮動小数点演算の表現に関する根本的な問題です! ただし、小数点以下 2 桁に丸めて base-10 を出力できます。

数値を境界を越えて安全にエクスポートするための標準的な安全な方法は、バイナリではなくプレーン テキストの ascii を使用することです。

于 2012-06-13T10:36:15.053 に答える