c#和Javascript中Math.round()的值不同

different value for Math.round() in c# and Javascript

本文关键字:round Javascript Math      更新时间:2023-09-26

C#

homeModel.FinancialComplianceModelList.AnnualDebtService=20;
homeModel.FinancialComplianceModelList.AnnualLeaseExpense=50;
homeModel.FinancialComplianceModelList.PPR=100;

decimal DebtAndLeaseToPPRRatio = Convert.ToDecimal((homeModel.FinancialComplianceModelList.AnnualDebtService + homeModel.FinancialComplianceModelList.AnnualLeaseExpense) / homeModel.FinancialComplianceModelList.PPR);

我计算了上面公式的值。计算值为

0.35 

我想要一个数字值。所以我使用math.round((

Int finalvalue=Convert.ToInt32( Math.Round(DebtAndLeaseToPPRRatio));

现在FinalValue is 0//它是好的

Javascript

现在我在javascript中使用了相同的公式和相同的值,以查看下面的代码

 $("#DebtAndLeaseToPPRRatio").text(Math.round(((AnnualDebtService + AnnualLeaseExpense) / PPR).toFixed(1)) + "%");

但现在它的显示结果是1

当我使用相同的公式时,为什么c#显示为0?而CCD_ 5是返回CCD_?

UPDATE:一般来说,c#和javascript中的Math.round也在做同样的事情。然而,有几个细微差别。有关.net的详细信息,请访问Jon Skeet的答案,对于一些javascript问题,您可以在MDN和这个SO答案上找到参考。

在你进一步讨论之前,我建议你仔细阅读关于浮点数的三个运算——圆形、底部和顶部。

这是.net 的起点

http://msdn.microsoft.com/en-us/library/system.math.round.aspx

一个用于javascript

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/round

如果您对以下数字0.1、0.5、07、0.9进行Math.round(x(的简单测试,您将在javascript和.net 中得到相同的结果

考虑到在一些浏览器中,javascript可以用大数字给你"时髦"的结果

检查这个答案在javascript中使用Math.round在的末尾添加了奇怪的0

另外,为了学习,请阅读关于银行家四舍五入的文章。为什么Math.Round(2.5(返回2而不是3?

我认为问题出在其他地方:

如果我们使用您在问题中提供的值:

homeModel.FinancialComplianceModelList.AnnualDebtService=20;
homeModel.FinancialComplianceModelList.AnnualLeaseExpense=50;
homeModel.FinancialComplianceModelList.PPR=100;
decimal DebtAndLeaseToPPRRatio =
    Convert.ToDecimal((homeModel.FinancialComplianceModelList.AnnualDebtService +
                       homeModel.FinancialComplianceModelList.AnnualLeaseExpense)/
                       homeModel.FinancialComplianceModelList.PPR);

假设计算中至少有一个变量是十进制的DebtAndLeaseToPPRRatio现在是0.7(否则,如果计算ints,则得到0(。因为(20.0 + 50.0) / 100 = 0.7,但是注意(20 + 50) / 100 = 0

不确定你从哪里得到0.35。另外,Math.Round(0.35)(C#(和Math.round(0.35)(JavaScript(会得到0。不同之处在于,当您执行Math.Round(0.5)(C#(->0.0时,其中Math.round(0.5)(JavaScript(->1

我正在用两种语言(使用提供的值(测试您的代码,并且在每种情况下都得到1