打印号码-99'999'999'999'999.99

问题描述 投票:0回答:1

我想打印数字-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

请帮助我找到打印完全相同数字的解决方案。

c++ c++17 c++20
1个回答
0
投票

欢迎来到浮点数的世界。正如@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;
    
}
© www.soinside.com 2019 - 2024. All rights reserved.