ゲームの終了時にスコアを与えるゲームを作成しましたが、問題はこのスコアが小数点以下の桁数が多い数値(87.124563563566など)である場合があることです。 87.12のように値を切り上げたり切り下げたりするにはどうすればよいですか?
ありがとう!
Math.Round を使用してみてください。さまざまなオーバーロードにより、必要な桁数を指定したり、数字を丸める方法を指定したりできます。
常に切り上げまたは切り捨てを行うには、Math.Ceiling(87.124563563566)
またはMath.Floor(87.124563563566)
を使用します。これは最も近い整数になると思います。
常に小数点以下2桁に切り捨てるには:
decimal score = 87.126;
Math.Floor(score * 100) / 100; // 87.12
常に小数点以下2桁まで切り上げるには:
decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
スコアを破壊するのではなく、文字列をフォーマットするだけです。
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
double
タイプの変数には問題なく、数学的に正しい数値です。
このような状況を回避するための解決策を2つ確立しています。
Math
ライブラリを使用できます。この「奇妙な」数字が表示される理由を知りたいのですが、ここで読むことができます: 無理数
コメントを追加するほどの評判がないので、答えを作成する必要があります。しかし、timuridは正しい、文字列をフォーマットするだけです。
あなたが探しているものは次のとおりだと思います:
var myScore = 87.124563563566
var toShowOnScreen = myScore.ToString("0.00");
値をフォーマットするカスタムの方法のいくつかをここで説明します: https://msdn.Microsoft.com/en-US/library/7x5bacwt(v = vs.80).aspx
多くの人は、数学ライブラリを使用して数値を丸めることを推奨していますが、それでも非常に小さな丸め誤差が生じる可能性があります。 Math.Roundは、末尾にゼロが付いた数値と非常に小さな丸め誤差を持つ数値を返すことができます。これは、内部的にはfloatとdoubleがまだ2進数として表されているため、特定の小さな10進数をきれいに表すことが難しい場合が多いためです。
最適なオプションは、文字列フォーマットのみを使用するか、実際に丸めたい場合は、2つを組み合わせることです。
Math.Round(val, 2).ToString("0.00")