1
我在XSLT中取整和在C#中舍入時出現了奇怪的差異。C#和XSLT舍入差異
<xsl:value-of select="round(325 div 50) * 50" />
給了我350
但在C#這樣
Math.Round(325/50) * 50
給我300!
任何想法如何使C#版本的行爲與XSLT版本相同?
我在XSLT中取整和在C#中舍入時出現了奇怪的差異。C#和XSLT舍入差異
<xsl:value-of select="round(325 div 50) * 50" />
給了我350
但在C#這樣
Math.Round(325/50) * 50
給我300!
任何想法如何使C#版本的行爲與XSLT版本相同?
Math.Round
向最接近的甚至發送數值按照https://msdn.microsoft.com/en-us/library/3s2d3xkk(v=vs.110).aspx和https://msdn.microsoft.com/en-us/library/wyk4d9cy(v=vs.110).aspx。
最接近的整數。如果a的小數部分在兩個整數之間的一半爲 ,其中一個是偶數,另一個是奇數,則返回偶數。
這就是着名的Banker's Rounding。
如果這不是您期望的行爲,您可以按照https://msdn.microsoft.com/en-us/library/ef48waz8(v=vs.110).aspx指定要舍入的方式。
Math.Round((double)325/50, MidpointRounding.AwayFromZero) * 50
這工作完美,並感謝解釋和鏈接。 – Ambuj
我認爲這個解釋忽略了OP的一部分問題,那就是他正在進行整數除法。 'Math.Round(349/50)* 50'也會給出'300'。 –
'Math.Round(349/50)* 50'實際上並沒有編譯(試試看@MarkDickinson) - 這就是爲什麼我改變它以在我的答案中包含雙重演員。 – mjwills