c++ - C++ 在数学计算中将 double 转换为 int
问题描述
当我写cout<<3.0/2.0;
时我得到 1.5,但当我写时cout<< 3.0*2.0;
我得到 6。如果 3.0 和 2.0 是双精度值,那么我的结果不应该是像 6.0 这样的双精度值吗?根据int或double的结果是什么?
解决方案
的结果3.0 * 2.0
很大程度上是双(a)。然而,价值的呈现并不是价值。你会发现 , 6
, 6.0
, 6.00000
,0.06E2
甚至6000E-3
符号都是相同的值,不同的表现形式。-6(epi×i)
如果您不想要默认表示(b),则iostream
和标头具有以特定iomanip
格式格式化数字的功能,例如使用它来获取:6.0
#include <iostream>
#include <iomanip>
int main() {
auto x = 3.0 * 2.0;
std::cout << std::setprecision(1) << std::fixed << x << '\n';
}
(a)标准中规定的常用算术转换在这里发挥作用(例如,C++17 8 Expressions /11
):
许多期望算术或枚举类型的操作数的二元运算符会以类似的方式导致转换和产生结果类型。目的是产生一个通用类型,这也是结果的类型。这种模式称为通常的算术转换,其定义如下:
- 如果任一操作数属于范围枚举类型,则不执行任何转换;如果另一个操作数的类型不同,则表达式格式错误。
- 如果任一操作数是 long double 类型,则另一个应转换为 long double。
- 否则,如果任一操作数为双精度,则另一个应转换为双精度。
- 在这个问题的背景下其他不相关的东西。
(b)默认情况下打印的实际规则在标准中指定,但足够复杂和区域设置感知,大多数人可能更容易进行显式格式化:-)
推荐阅读
- c++ - 为什么使用默认构造函数构造的 std::string 对象表现不同?
- roku - Roku 中的多个组件如何处理焦点?
- sql-server - 与内部联接一起使用时,东西函数返回重复记录
- android - 在 Android 10 中,如何使用 ADB 跟踪应用程序的网络统计信息 (netstats)
- python - 舍入输出值
- docker - 如何使用 shell 脚本执行 docker 容器并进入该容器并运行 cron 作业?
- javascript - 模态脚本在页面上始终打开相同的模态
- excel - 如果满足多个条件,则将重复的单元格值计为一个
- jquery - 分页时数据表列宽自动增加
- python - pip 或 conda 安装要求与代理背后的本地和外部依赖项