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.99999997e-07。如果手动计算它应该是0.000001 如何使指数num为0.000001? 感谢。
如果结果= 9.99999997e-07阶段计算的将是199999,但是如果结果= 0.000001阶段计算的将是200000。 所以我的问题就是结果。
加入
答案 0 :(得分:2)
对于财务和某些其他用途,最简单的方法是以最小单位的倍数工作......在您的示例中,它可能是" micron":
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();
}
boost Units library提供了一种更加结构化(可靠)的方法。这样,您可以指定特定变量的单位,例如,一个是米和另一公里,你可以不加任何特别的照顾添加它们。
如果你正在处理irrational numbers并在早期将它们四舍五入到一个特定的精度是没用的,那么你最好使用double
(对于一些更重要的精度数字)或自定义库,如GMP - the GNU Multiple Precision Arithmetic Library。
BTW - What Every Computer Scientist Should Know About Floating-Point Arithmetic通常建议在此空间阅读。
答案 1 :(得分:0)
你不能,因为数字1 / 1000000.0不能用二进制表示。您可以使用double
来提高准确性。这类问题在这里很常见。我发现这个链接很有用:
https://docs.python.org/2/tutorial/floatingpoint.html
(它适用于Python,但问题是相同的)。