2017-06-26 9 views
1

XSLTで四捨五入したときとC#で四捨五入したときの違いがわかりました。C#とXSLTの丸めの差

<xsl:value-of select="round(325 div 50) * 50" /> 

は私に350

を与えるしかし

Math.Round(325/50) * 50 

は私に300を与えるC#でこれをやって!

どのようにC#のバージョンをXSLTバージョンと同じように動作させることができますか?

答えて

0

Math.Roundの値でさえ、https://msdn.microsoft.com/en-us/library/3s2d3xkk(v=vs.110).aspxhttps://msdn.microsoft.com/en-us/library/wyk4d9cy(v=vs.110).aspxのように値を丸めます。

aに最も近い整数。 aの小数成分が2つの整数の中間にある場合は、 のうちの1つが偶数であり、もう1つが奇数の場合、 の偶数が返されます。

バンカーの丸み付けです。

期待される動作でない場合は、https://msdn.microsoft.com/en-us/library/ef48waz8(v=vs.110).aspxに従って丸めをどのように行うかを指定できます。

Math.Round((double)325/50, MidpointRounding.AwayFromZero) * 50 
+0

これは完全に機能し、説明とリンクに感謝します。 – Ambuj

+1

私はこの説明が彼が整数除算をしているOPの問題の一部を見逃していると思います。 'Math.Round(349/50)* 50'も' 300'を与えています。 –

+0

'Math.Round(349/50)* 50'は実際にはコンパイルされません(試してみて@MarkDickinsonを参照) - これが私の答えに二重キャストを含めるように変更した理由です。 – mjwills