【问题标题】:What's wrong with this division? [closed]这个部门有什么问题? [关闭]
【发布时间】:2009-04-01 09:13:20
【问题描述】:

我认为我有很多关于数据类型的知识。 为什么会发生这种情况

double result = ((3/8)*100).ToString();

它给出零 .. 应该是 37,5 ... :(

【问题讨论】:

  • 以后,请说明您要询问的语言
  • 嗯,为什么在分配给双精度时使用 .ToString?
  • 请选择一个至少能暗示您的问题主题的标题。
  • 什么类型的语言允许字符串双重赋值??
  • Ints and Doubles doing division 的可能重复项

标签: c# double division


【解决方案1】:

3/8进行整数除法,结果为0

double result = ((3.0/8)*100);

应该这样做。

顺便说一句,如果你这样做 ((3.0/8)*100).ToString() 你会得到一个字符串而不是一个双精度。

【讨论】:

    【解决方案2】:

    你需要说服编译器执行浮点除法:

    double result = (((double)3/8)*100);
    

    否则执行整数除法,则 3/8 为零。

    【讨论】:

    • 在常量中使用小数点可以避免丑陋的演员表:)
    • ...还有 .ToString() 的问题 :)
    • 关于 ToString() 的事实——完全错过了它。丑陋的演员表使它看起来更加明确。
    【解决方案3】:
    double result = ((3.0/8.0)*100);
    

    应该这样做。您执行的是整数除法,而不是浮点除法。

    【讨论】:

      【解决方案4】:

      你的表达式只涉及整数,3/8是0。

      如果你想要一个浮点表达式,表达式的至少一个元素必须是浮点数。

      最简单的解决方案如下:

      double result = (100.0 * 3/8)
      

      请注意,我将百因子放在首位,因为它有助于在除法之前进行更精确的乘法运算。

      另外,toString() 很奇怪??

      【讨论】:

      • 当你使用浮点数时,首先乘法几乎无关紧要,当你想保持整数时它很有用。
      【解决方案5】:

      3 和 8 是整数,所以 3/8 = 0。

      用途:

      string result = ((3d/8d)*100d).ToString();
      

      【讨论】:

      • 这不会编译 ;-) 将结果设为字符串或删除 .ToString()
      • 哎呀——你是对的。现在修好了。谢谢。
      【解决方案6】:

      整数除法 (3/8) 产生 0。如果您想使用浮点值,请在您的编程语言中明确说明(3.0/8.0 或 3f/8f 或 3d/8d 或您的语言允许的任何其他值)

      【讨论】:

        【解决方案7】:

        3 和 8 是整数,因此 3/8 的结果也是整数,除非你以不同的方式转换它。

        所以,3/8 = 0。

        【讨论】:

          【解决方案8】:

          独角兽把3拿走了,换成了0。

          如果这是一个真正的问题... 3/8 向下舍入为 0。0* 100 = 0。

          【讨论】:

            【解决方案9】:

            因为使用了整数数学,而不是浮点数。

            您写了((3/8)*100),但该表达式中的所有常量都没有非整数类型。因此编译器(正确地)将其解释为整数算术。由于 3/8 小于 1,因此表达式的计算结果为 0。

            一个简单的解决方法是改写((3./8.)*100.)。实际上,由于混合类型表达式的规则,将 3 或 8 设为浮点值就足够了。

            【讨论】:

              【解决方案10】:

              除法中的 3 和 8 是整数文字,因此会执行整数除法,并且 3 / 8 的计算结果为零。如果您将它们替换为 3.0 和 8.0,或者使用适当的数据类型后缀(您没有说明您使用的是哪种语言),那么计算将起作用。

              【讨论】:

                【解决方案11】:

                3/8 = 0

                3.0/8.0 = 0.375

                【讨论】:

                  猜你喜欢
                  • 2012-04-19
                  • 1970-01-01
                  • 2014-07-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-08-22
                  • 2015-02-23
                  • 2015-01-14
                  相关资源
                  最近更新 更多