我必须使用 DECIMAL 类型(tagDEC 结构)以获得更高的精度。
但是 Windows API 中的 C++ 的 DECIMAL 只是一个结构。
typedef struct tagDEC {
USHORT wReserved;
union {
struct {
BYTE scale;
BYTE sign;
} DUMMYSTRUCTNAME;
USHORT signscale;
} DUMMYUNIONNAME;
ULONG Hi32;
union {
struct {
ULONG Lo32;
ULONG Mid32;
} DUMMYSTRUCTNAME2;
ULONGLONG Lo64;
} DUMMYUNIONNAME2;
} DECIMAL;
该值来自具有 .net DECIMAL 结构的对等方(C# 程序),通过 tcp 套接字。
那么如何以友好的方式显示/打印出它的值,例如 C++ 中的 - 12,345.678 * 10^(-21)?
使用一个简单的任意精度库(我找到了 this one ,自由许可,仅 header ),这应该是这样的:
DECIMAL input;
std::vector<Num::word> words{input.Lo64, input.Hi32};
Num n = Num(words.data(), words.data()+2, input.sign == 1).truncate() * Num(10).pow(input.scale);
std::vector<char> output;
n.print(output);
std::cout << output.data() << endl;
我是一名优秀的程序员,十分优秀!