4

私の次のコードでは

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
int Value = (int)(((double)Price / PRICE) * Multiplier);

私は値が 14892 であることを期待していますが、C# では 14891 になっています....

4

3 に答える 3

4

浮動小数点演算IDは常に概算です。Math.Round()、Math.Floor()、またはMath.Ceiling()のいずれかを使用して、double/floatを任意のint型に変換する方法を制御します。または、代わりにDecimalの使用を検討してください。

于 2013-03-13T16:01:32.890 に答える
0

moの開発マシンではありませんが、これを試すことはできますか?

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
checked
{
int Value = (int)(((double)Price / PRICE) * Multiplier);
}

オーバーフローした場合はエラーをスローする必要があります

http://msdn.microsoft.com/en-gb/library/74b4xzyw(v=vs.71).aspx

于 2013-03-13T16:08:37.677 に答える
0

変換したい値を取得する方法に慣れていない場合は、この回答で探しているものが得られます

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
var Value = (Convert.ToInt32(Math.Round((double)Price / (double)PRICE) * Multiplier));

またはvarキーワードを使用しない別のバージョンでも同じ結果が得られます

long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
int Value = (int)(Math.Round((double)Price / (double)PRICE) * Multiplier);

Answer = 14892

于 2013-03-13T16:17:31.393 に答える