0

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

现在我在 a 中使用了具有相同值的相同公式,javascript请参见下面的代码

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

但现在它的显示结果是1

当我使用相同的公式时,为什么 c# 是 display 0Javascript是回报吗1

4

2 回答 2

1

更新:一般来说,C# 和 javascript 中的 Math.round 做同样的事情。但是有几个细微差别。有关 .net 的详细信息,请访问 Jon Skeet此处的答案,对于一些 javascript 问题,您可以在MDNSO 答案中找到参考。

在你继续之前,我建议你仔细阅读关于浮点数圆形、地板和天花板的三个操作。

这是.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 可以为您提供带有大数字的“时髦”结果

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

另外,只是为了学习,请在此处阅读有关银行家四舍五入的信息为什么 Math.Round(2.5) 返回 2 而不是 3?

于 2013-05-25T05:08:25.590 回答
-1

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

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

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.35Math.Round(0.35)(C#) 和(JavaScript)也Math.round(0.35)会让你0. 不同之处在于您何时执行Math.Round(0.5)(C#) -> 0.0where Math.round(0.5)(JavaScript) -> 1

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

于 2013-05-25T04:55:44.797 回答