在 C++ 中打印至少一个小数位
print at least one decimal place in c++?
我想用最多 10 位小数C++double
值字符串化,所以我使用类似的东西
std::stringstream s;
double value = 3.1415926;
s << "value is " << std::setprecision(10) << value;
但是,如果value
有一些精确的整数值,例如 4.0,我希望它打印4.0
而不仅仅是4
。 有没有办法用C++ stringstream
,甚至是老式的snprintf()
来实现这一点?
到目前为止,我能想到的唯一解决方案是将value
与floor(value)
进行比较:
std::stringstream s;
if (floor(value) == value)
s << std::setprecision(1) << std::fixed << value;
else
s << std::setprecision(10) << value;
如果有必要,我会保留该解决方案,但我很好奇我是否忽略了一些可以帮助我避免条件的iostream小工具。
使用 std::fixed
:
s << "value is " << std::fixed << std::setprecision(10) << value;
现场演示
更新:我想我误读了你要找的东西。 仅靠std::fixed
并不能解决您要解决的问题 - 对整数使用精度 1,对小数使用精度 10。 您可以使用std::modf()
来区分它们(为简单起见,我将忽略无限和 NaN,但请确保在实际代码中考虑它们(,例如:
#include <cmath>
std::stringstream s;
double integral;
if (std::modf(value, &integral) == 0)
s << std::fixed << std::setprecision(1) << integral;
else
s << std::fixed << std::setprecision(10) << value;
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- C 打印一个分子和分母的小数
- C 如何用逗号(而不是点)在文件中打印一个双小数号
- 为什么在浮点比较中,最后一个小数位数为5的浮点值能给出正确的输出,而在其他情况下却不是
- 使用 cout 打印一个(浮点)小数
- 声明一个动态大小数组
- 为什么我的程序输出一个巨大的小数
- 我可以定义一个函数来返回对固定大小数组的引用吗
- C++ 创建一个介于 0.1 和 10 之间的随机小数
- 不能做一个固定大小数组的向量
- c++ setprecision(2)输出一个小数
- 有没有一个变量,可以保存字母和小数
- 在c++中初始化一个外部可变大小数组