算术,以获得正确的十进制数,而不是 c++ 中的指数数
Arithmetic to get correct decimal number instead of exponential number in c++
int digit = 1;
float result=0.0;
double temp = 200000;
float tick = 0.00100000005;
result = digit/1000000.0;
long long phase = temp*result*1000/tick*1000
结果将等于 9.999999997E-07。如果手动计算,它应该是 0.000001如何使指数位数为 0.000001?谢谢。
如果结果 = 9.99999997E-07 阶段计算将为 199999,但如果结果 = 0.000001 计算的相位将为 200000。所以我的问题是结果。
加入
对于金融和某些其他用途,最简单的方法是以最小单位的倍数工作......在您的示例中,它可能是"微米":
inline long long units_to_microns(long long units) { return units * 1000000; }
long long digit = units_to_microns(1);
long long result = digit / 1000000;
然后编写一些自定义代码,将数字打印到所需的小数点:
std::string microns_to_string(long long microns)
{
std::ostringstream oss;
oss << microns / 1000000;
if (microns % 1000000)
oss << '.' << std::setfill('0') << std::setw(6) << microns;
return oss.str();
}
一种更结构化(和可靠)的方式来做到这一点是由提升单位库提供的。 这样,您可以指定特定变量的单位,例如,如果一个以米为单位,另一个以公里为单位,则可以添加它们而无需任何特别小心。
如果你正在处理无理数,并且尽早将它们四舍五入到特定的精度是没有用的,那么你最好使用double
(对于一些更有效的精度数字),或者像GMP这样的自定义库 - GNU多精度算术库。
顺便说一句 - 每个计算机科学家都应该知道的关于浮点运算的知识是这个领域的推荐阅读。
您不能,因为数字 1/1000000.0 无法以二进制准确表示。您可以使用double
提高准确性。这种类型的问题在这里很常见。我发现这个链接很有帮助:
https://docs.python.org/2/tutorial/floatingpoint.html
(这是针对 Python 的,但问题是相同的)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '