【问题标题】:What is the difference between 4/3 and 4/3.0? [duplicate]4/3 和 4/3.0 有什么区别? [复制]
【发布时间】:2021-12-13 11:38:53
【问题描述】:

我需要编写一个程序来使用公式V=(4/3)*pi*r^3计算球体的体积

有什么区别

volume_sphere = (4/3)*pi*r*r*r; 

volume_sphere = (4/3.0)*pi*r*r*r; 

?

当我输入 3 作为我的 r 的值时,前者给了我一个错误的答案 (84.823196)。但是,当我使用后者(带有“.0”)时,它给了我正确的答案(113.0976)。

我对“.0”的区别感到很困惑。谢谢你的回答!

【问题讨论】:

  • 3int 文字,3.0double 文字。使用.0 是确保将数字文字键入为double 的惯用方式。您可以使用f 作为后缀而不是.0 来使用float(单精度)而不是double 或使用lL 作为long double
  • 没有.0 你有一个整数文字,4/3 执行整数除法(产生1
  • 因为43都是整数,所以除法4 / 3是整数除法,结果是整数。如果其中一个数字是一个浮点数(3.0 是一个double 值)那么它将变成一个浮点运算,结果为浮点数。
  • 另一个选项是pi * r * r * r * 4 / 3。括号的删除意味着 4 / 3 的计算不是独立于表达式的其余部分。
  • 正如@WeatherVane 所说,操作的顺序很重要,这些操作的操作员优先级也很重要。因为你有带括号的操作,所以先解决;如果您有一个“数学等效”运算,其中一个操作数已经是浮点数,那么结果也将被计算为浮点数。

标签: c floating-point integer-arithmetic binary-operators


【解决方案1】:

在这个表达式中

4/3

二元运算符/ 的两个操作数都具有int 类型。所以使用了整数运算,表达式的结果是1

在这个表达式中

4/3.0

第二个操作数是double 类型的常量。因此,由于通常的算术转换,第一个操作数也被转换为 double 类型。并且运算的结果是一个浮点数。即没有将结果的小数部分截断为整数值。

【讨论】:

    【解决方案2】:

    4 / 3 = 1,而 4 / 3.0 = 1.333333...

    一个整数除以一个整数会得到一个整数, 但是“.0”使答案有小数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2011-10-23
      • 2022-11-22
      • 2014-03-05
      • 2022-11-27
      相关资源
      最近更新 更多