我想打印数字-99'999'999'999'999.99,而不是该数字的近似值。我该怎么办?
这是我的代码:
double number = - 99'999'999'999'999.99;
std::cout << std::fixed << std::setprecision(20) << "Number: " << number << std::endl;
和输出:
号码:-99999999999999.98437500000000000000
请帮助我找到打印完全相同数字的解决方案。
欢迎来到浮点数的世界。正如@NathanOliver 和@yeputons 所说,双精度数不能代表所有可能的值。在我的机器 (x86_64) 上,您的号码具有表示形式
-0x1.6bcc41e8fffffp+46
。下一个可能的值是 -0x1.6bcc41e900000p+46;
,其值为 -100000000000000
。
#include <iostream>
#include <iomanip>
int main() {
double number = - 99'999'999'999'999.99;
std::cout << std::fixed << std::setprecision(20) <<
"Number: " << number << std::endl;
std::cout << std::hexfloat << number << std::endl;
double number2 = -0x1.6bcc41e8fffffp+46;
double number3 = -0x1.6bcc41e900000p+46;
std::cout << std::hexfloat << number2 << std::endl;
std::cout << std::hexfloat << number3 << std::endl;
std::cout << std::fixed << std::setprecision(20) <<
"Number3: " << number3 << std::endl;
}