編集:バグを再現するために、自宅で仕事をしていたのと同じコードを書きました。これは正確なコードです!!
c++ から c# に浮動小数点数を渡そうとしていますが、中間として c++ CLI を使用しています。C++ cli に次の関数があります
void myclass::getFloats(float% f1, float %f2)
{
float f11=734212.384f;
float f22=467474.26675f;
f1=f11;
f2=f22;
}
関数の最後にブレークポイントを置いてそこで停止すると、次のことがわかります。
- f1 は : 734212.38 を保持します。
- f2 は : 467474.28 を保持します。
浮動小数点の制限により問題ないと思います。
しかし、スコープが終了し、この関数を呼び出した C# コードに戻ると、次のようになります。
myclass m = new myclass();
float f1=0, f2=0;
m.getFloats(ref f1, ref f2);
そして、getFloat 関数の後に停止します。
- f1 は 734212.4 を保持します
- f2 は 467474.281 を保持します
なぜこれが起こっているのか、私には手がかりがありません。なぜ最初の数字で彼は 0.38 を 0.4 に切り上げ、2 番目の数字では切り上げずに 0.001 を追加したのですか?
どんな助けでも大歓迎です、前もって感謝します