【问题标题】:C# MathemathicsC# 数学
【发布时间】:2021-09-17 17:25:41
【问题描述】:

我想问一个关于我今天用 C# 计算的问题。

double expenses = (pricePen + priceMark + priceLitres) - discount / 100*(pricePen + priceMark + priceLitres); //Incorrect

double expenses = (pricePen + priceMark + priceLitres) - (pricePen + priceMark + priceLitres)* discount/100;   //Correct 

正如您在等式末尾看到的那样,我必须将括号乘以名为“折扣”的整数,这显然是折扣百分比。

当我更改该值的位置时,无论它是在括号前面还是在括号后面,答案总是不同的,但在数学中,我什至检查了自己,即使值是,我也应该得到相同的答案放在括号前面可以乘或放在括号后面再乘,但C#不这么认为。

我想问人们,C# 实际上是如何计算这个的,为什么我最后会得到不同的结果? (结果应该是 28.5,而不是 38)

[Data: pricePen = 11.6; priceMark = 21.6;  priceLitres = 4.8; discount = 25;]

(我知道这个问题无关紧要。)

【问题讨论】:

  • 请勿发布代码图片。直接在问题中将代码作为文本发布。这有助于我们阅读它,节省带宽,帮助我们将其复制到我们的答案中,适当地调整浏览器的大小,并且它可以被搜索引擎索引。
  • 并由无障碍设备阅读
  • 尝试将第一行中的 100 更改为 100.0 - 您现在使用整数除法,得到整数 (0)
  • double costs 应该是 decimal costs ,尤其是为钱而生的类型,避免各种舍入问题。 - 另外:请查看整数除法!!!
  • discount 是整数类型吗?那么discount/100 是整数除法,它会截断小数部分并只保留整数值。

标签: c# math calculation


【解决方案1】:

在除以 100 后的第一行中,结果为整数。为此,其余的部门迷路了。所以乘法的结果较低。
在第二行中,乘法的结果正确,其余的除法小于一。

【讨论】:

    【解决方案2】:

    所以我知道它已经回答了,但如果你想了解更多关于 int 部门的信息 在这里:

    例如:

    float value = 3/4 你会认为它是 0.75,但事实并非如此。

    因为当编译器遍历值 3 和 4 时,他会生成最高数据类型的 des Literal - 在本例中为 (int)-。 这意味着这个除法的结果将是“0”.75,因为 int 没有浮点数,只是将其截断。然后程序只需将该值放入float value ... 所以结果将是

    "3/4" 0 ->"浮点值" 0.0 = 0.0

    在我之前的一些人已经告诉过你解决这个问题的方法,比如让一个除数随 .0 浮动

    float value = 3.0/4
    

    或者您可以使用 (float) "command" 告诉编译器将该值存储在浮点字面量中

    float value = (float) 3/4
    

    我希望它能帮助你解释你为什么这样做:)

    【讨论】:

      【解决方案3】:

      为避免这些问题,请确保您使用浮点类型而不是 int 类型进行数学运算。在您的情况下,discountint,因此

      x * (discount / 100) = x * <integer>
      

      最好定义一个函数来进行强制类型的计算

      double DiscountedPrice(double price, double discount)
      {
          return price - (discount/100) * price;
      }
      

      然后将其称为

      var x = DiscountedPrice( pricePen + priceMark + priceLitres, 15);
      

      在上述场景中,编译器将强制将整数 15 转换为双精度作为 加宽 转换(双精度数比整数多)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-21
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多