C 构建器忽略了STD ::修复了大数字
C++ Builder ignores std::fixed for big numbers
请考虑以下程序,该程序旨在将浮点数打印到三个小数点位置:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
int main() {
double val = 1.234567890e50;
std::stringstream ss;
ss << std::fixed << std::setprecision(3);
ss << val;
std::cout << ss.str() << std::endl;
return 0;
}
这个数字不能完全表示为双重,但这是无关紧要的。
在GCC 5.1上,程序打印
12345678900000000000046710074539164322570015270366608512.000
在Embarcadero C 建造器10.1(编译器BCC32C版本3.3.1)上,输出为:
1.234567890000000000470000000000000000000000000E 50
为什么C 构建器输出不匹配所选的浮点符号,哪个是std::fixed
?即使数字为10^300,GCC也使用选定的符号表示。
为什么这两个编译器的工作方式不同?C 标准是否在这种情况下定义字符串转换应如何工作?
embarcadero c 建筑商10.1有一个错误。
std::setprecision(3);
设置了在之后显示的数字数量,将小数分隔符到恰好 3,无论该平台上的浮点方案是否可以表示该数字。
gcc5.1符合此。
Embarcadero C 建筑商10.1不是。
请参阅http://en.cppreference.com/w/cpp/io/manip/setprecision,几乎可以代表C 标准。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++为构建时间获取QDateTime的可靠方法
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 无法在 CLion 中构建 C++ 项目
- 检查输入是否不是整数或数字
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- C 构建器忽略了STD ::修复了大数字
- 构建一个程序,将 10 个整数放入数组中并识别重复的数字并输出它们及其位置编号的位置