0

可能重复:
以更精确的方式将数字写入文件 - C++

在将纬度/经度值存储double为时,我一直以包含修剪数字的变量结束 - 例如 47.2792 表示 47.279229 和 8.42432 表示 8.424317 - 在变量分配和执行算术期间,使变量保持所有数字而不会丢失的最佳方法是什么操作 - 例如将 0.01098901098 添加到 47.279229 并将其存储为新变量而没有任何精度损失等 -?setprecision为流处理这个,但我还没有找到一种方法来作为它的变量/数学对应物。

4

1 回答 1

2

该类型double在内部 [通常] 存储为二进制浮点。一般来说,十进制值不能精确地表示使用二进制浮点值,尽管通常可以精确地恢复原始十进制值(除了正确数量的尾随零)。在进行计算时,会操纵接近原始值的值,从而引入额外的错误。将十进制小数转换为double,使用这些值进行计算并将它们转换回的结果将产生接近预期结果的值,但它不会是准确的。

如果您知道要处理的最大小数位数,则可以将原始值乘以 10 的合适幂,并使用整数算术进行计算。要显示这些值,您只需在适当的位置插入一个小数点。

于 2012-10-02T19:30:01.233 回答