Javascript和C#
正如您所知,由于Javascript和C#,javascript,c#,kendo-ui,Javascript,C#,Kendo Ui,正如您所知,由于C 35;中的genius舍入规则,我们得到以下值: decimal d = 2.155M; var r = Math.Round(d, 2); //2.16 decimal d = 2.145M; var r = Math.Round(d, 2); //2.14 现在在客户端的Javascript中,我得到了: 2.155.toFixed(2) "2.15" 2.145.toFixed(2) "2.15" kendo.toString(2.155, 'n2') "2.1
C 35;
中的genius舍入规则,我们得到以下值:
decimal d = 2.155M;
var r = Math.Round(d, 2); //2.16
decimal d = 2.145M;
var r = Math.Round(d, 2); //2.14
现在在客户端的Javascript
中,我得到了:
2.155.toFixed(2)
"2.15"
2.145.toFixed(2)
"2.15"
kendo.toString(2.155, 'n2')
"2.16"
kendo.toString(2.145, 'n2')
"2.15"
但是我在后端进行了验证,由于这个原因失败了。处理这种情况的正确方法是什么?如何同步C#
和Javascript
舍入,以确保它们都舍入到相同的值?有一个接受指示器,用于确定当数字介于其他两个数字之间时如何舍入。例如,中点到整数将0.5四舍五入为零,因为零是最接近的测试偶数:
decimal d = 2.155M;
var r = Math.Round(d, 2, MidPointRounding.AwayFromZero); //2.16
decimal d = 2.145M;
var r = Math.Round(d, 2, MidPointRounding.AwayFromZero); //2.15
根据定义使用中点到偶数
,您的数字将始终四舍五入到最接近的偶数。这就是你得到的结果:
2.155 --> 2.16
2.145 --> 2.14
您可以指定要在C#中使用的规则:
小数的默认值是中点舍入。ToEven
AKA,它旨在最小化多次舍入操作的偏差
圆半到偶数方法对称处理正值和负值,因此不存在符号偏差。更重要的是,对于y值的合理分布,四舍五入数字的平均值与原始数字的平均值相同。然而,当y为0时,该规则将引入一个向零偏移− 0.5是偶数,当它是奇数时,会有一个朝向无穷大的偏差。此外,它通过增加偶数相对于赔率的概率来扭曲分布
谢谢,明白了!错过了那个。非常感谢。实际上,我的问题完全在Javascript方面,我将创建一个新问题。
decimal d = 2.145M;
var r = Math.Round(d, 2, MidpointRounding.AwayFromZero); //2.15