私の次のコードでは
long Price = 148920000;
long PRICE = 1000000;
double Multiplier = 100.00;
int Value = (int)(((double)Price / PRICE) * Multiplier);
私は値が 14892 であることを期待していますが、C# では 14891 になっています....
浮動小数点演算IDは常に概算です。Math.Round()、Math.Floor()、またはMath.Ceiling()のいずれかを使用して、double/floatを任意のint型に変換する方法を制御します。または、代わりにDecimalの使用を検討してください。
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
変換したい値を取得する方法に慣れていない場合は、この回答で探しているものが得られます
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