4/3 和 4/3.0 有啥区别? [复制]
Posted
技术标签:
【中文标题】4/3 和 4/3.0 有啥区别? [复制]【英文标题】: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”的区别感到很困惑。谢谢你的回答!
【问题讨论】:
3
是 int
文字,3.0
是 double
文字。使用.0
是确保将数字文字键入为double
的惯用方式。您可以使用f
作为后缀而不是.0
来使用float
(单精度)而不是double
或使用l
或L
作为long double
。
没有.0
你有一个整数文字,4/3
执行整数除法(产生1
)
因为4
和3
都是整数,所以除法4 / 3
是整数除法,结果是整数。如果其中一个数字是一个浮点数(3.0
是一个double
值)那么它将变成一个浮点运算,结果为浮点数。
另一个选项是pi * r * r * r * 4 / 3
。括号的删除意味着 4 / 3
的计算不是独立于表达式的其余部分。
正如@WeatherVane 所说,操作的顺序很重要,这些操作的操作员优先级也很重要。因为你有带括号的操作,所以先解决;如果您有一个“数学等效”运算,其中一个操作数已经是浮点数,那么结果也将被计算为浮点数。
【参考方案1】:
在这个表达式中
4/3
二元运算符/
的两个操作数都具有int
类型。所以使用了整数运算,表达式的结果是1
。
在这个表达式中
4/3.0
第二个操作数是double
类型的常量。因此,由于通常的算术转换,第一个操作数也被转换为 double 类型。并且运算的结果是一个浮点数。即没有将结果的小数部分截断为整数值。
【讨论】:
【参考方案2】:4 / 3 = 1,而 4 / 3.0 = 1.333333...
一个整数除以一个整数会得到一个整数, 但是“.0”使答案有小数。
【讨论】:
以上是关于4/3 和 4/3.0 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
StringBuilder 和 Stringbuffer 有啥区别? [复制]