lexical_cast斯特托夫斯特托尔德失去了准确性
lexical_cast strtof strtold lose accuracy?
这里:
#include <iostream>
#include <cstdlib>
#include <boost/lexical_cast.hpp>
int main(void) {
const char * str = "277499.84";
std::cout << boost::lexical_cast<double>(str) << std::endl;
std::cout << strtof(str, NULL) << std::endl;
std::cout << strtold(str, NULL) << std::endl;
std::cout << atof(str) << std::endl;
return 0;
}
输出:
277500
277500
277500
277500
为什么输出不是 277499.84?
不是操作本身失去了准确性,而是输出。
您可以使用 I/O 操纵器std::setprecision
来控制数值精度。 以下内容将使用双精度的完整精度(假设流设置为十进制输出)。
double value = boost::lexical_cast<double>(str);
std::cout << std::setprecision( std::numeric_limits<double>::digits10 + 1 ) << value;
或者您可以使用 std::ios_base::precision
. 如果要在之后将精度恢复到原始值,这将非常有用。
auto old_precision = cout.precision( std::numeric_limits<double>::digits10 + 1 );
cout << value;
cout.precision( old_precision );
相关文章:
- 如何在MNIST上提高网络运行的准确性
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 启动类函数作为失去引用的线程
- 为什么对引用的常量引用会失去其恒定性?
- 当指针在 cpp 17 中失去引用时,是否会调用非默认析构函数?
- 使shared_ptr失去对内存的所有权
- 从"SymbolInfo*"转换为"YYSTYPE {aka int}"会失去精
- C++:从 "const variable*" 转换为"uint32"会失去精度
- 数组在返回时失去价值(库存/菜单程序)C++
- 在DLL中,C 静态矢量会失去元素
- 为什么我的std :: Map失去了价值
- 当在QTableView上丢失焦点时,失去背景颜色
- strtoull() 的输出在转换为双精度然后又转换为 uint64_t 时会失去精度
- 特征在矩阵加法中失去负号
- 如何提高浮点二阶导数计算的准确性
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- C++:递归(变量失去值)
- lexical_cast斯特托夫斯特托尔德失去了准确性
- C++铸造到更精确的类型并失去准确性
- 双打在什么时候开始失去准确性