Gio*_*uri 1 javascript c# kendo-ui
如您所知,由于天才舍入规则,C#我们得到以下值:
decimal d = 2.155M;
var r = Math.Round(d, 2); //2.16
decimal d = 2.145M;
var r = Math.Round(d, 2); //2.14
Run Code Online (Sandbox Code Playgroud)
现在在客户端,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"
Run Code Online (Sandbox Code Playgroud)
但是我在后端的验证是因为这个失败了.处理这种情况的正确方法是什么?我如何同步C#和Javascript舍入以确保它们都是相同的值?
在C#的Math.Round中有一个超载接受一个指示器,当数字在另外两个数据之间的中途时,如何舍入.例如,MidPointToEven将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
Run Code Online (Sandbox Code Playgroud)
根据defualt MidPointToEven使用,您的号码将全部四舍五入到最接近的偶数.你可以得到那些结果:
2.155 --> 2.16
2.145 --> 2.14
Run Code Online (Sandbox Code Playgroud)
您可以指定要在C#中使用的中点舍入规则:
decimal d = 2.145M;
var r = Math.Round(d, 2, MidpointRounding.AwayFromZero); //2.15
Run Code Online (Sandbox Code Playgroud)
小数的默认值是MidpointRounding.ToEvenAKA 银行家的舍入,它旨在最大限度地减少多次舍入操作的偏差.
圆半到均匀方法对称地处理正值和负值,因此没有符号偏差.更重要的是,对于y值的合理分布,舍入数字的平均值与原始数字的平均值相同.然而,当y-0.5为偶数时,该规则将引入偏向量的偏差,而当奇数为y时,该规则将引入朝向无穷大的偏差.此外,它通过增加相对于赔率的均匀概率来扭曲分布.
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |