【问题标题】:different value for Math.round() in c# and Javascriptc# 和 Javascript 中 Math.round() 的不同值
【发布时间】:2025-11-27 10:45:01
【问题描述】:

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?而Javascript 是返回1 ?

【问题讨论】:

  • 在 javascript 中检查你的变量,就像你在 javascript 中只做 Math.round(0.35) 它会给你 0

标签: c# javascript asp.net


【解决方案1】:

更新: 一般来说,C# 和 javascript 中的 Math.round 做同样的事情。但是有几个细微差别。有关 .net 的详细信息,请访问 Jon Skeet 答案 here,对于一些 javascript 问题,您可以在 MDNthis 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 可以为您提供带有大数字的“时髦”结果

查看这个答案Using Math.round in javascript adds weird number of 0s at the end

另外,出于学习目的,请在此处阅读有关银行家四舍五入的信息Why does Math.Round(2.5) return 2 instead of 3?

【讨论】:

  • 如果您对以下数字 0.1 0.5 .07 0.9 进行 Math.round(x) 的简单测试,您将在 javascript 和 .net 中得到相同的结果。 没有。我无法得到相同的答案。这是返回差异值!
  • Math.round for 0.5 不会得到相同的结果,试一试。
  • @DimitarDimitrov 请阅读第一个和最后一个链接,有这些信息。
  • @vittore 我认为 OP 的计算有点偏离。
【解决方案2】:

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

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

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

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

【讨论】:

最近更新 更多