如果在浮点数和 4 字节(无符号)整数(两者都需要相同的内存存储量)之间进行选择,则有利有弊:
- 假设价格的格式为 $$$$$.cc(1/100 不能以浮点格式精确表示 - 单格式和双格式),浮点数无法准确处理美分,因此这将引入舍入误差在与金钱相关的应用程序中通常是不可接受的。
- int - 假设您以美分表示价格 - 将允许 -2^31 到 2^31-2^0(约 2 * 10^9)美分范围内的精确值用于有符号值和 0 到 2^32- 2^0(约 4 * 10^9)无符号。缺点是使用美分而不是美元和美分可能感觉“不自然”,但这主要是开发人员心中的一个问题:实际的“问题”——如果你想这样称呼它们——在以美元打印价值时出现和美分,它们需要稍微复杂的格式,但与如何简化应用程序的其余部分相比,这是一个非常小的代价。
稍后,在求和或执行其他计算时 - 整数分和数量值首先转换为双精度浮点数。双精度格式允许在 -(2^53-2^0) 到 2^53-2^0 范围内精确表示整数值(假设整数美分),这可能(您需要检查)满足您的需求。但请记住,在 double 中仍然会有整数美分,需要转换为美元和美分。
编辑_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _
“6-7 位精度的十进制数字”最容易用单精度格式表示的整数范围来解释。由于 SP 格式的有效位长为 24 位(1 隐式 + 23 显式),这允许 2^0 到 2^24-2^0 或 1 到 16777215 范围内的整数。16777215 大于 6 (999999) 但小于 7 (9999999) 个十进制数字,因此是“6-7 个十进制数字”。双精度格式具有 53 位有效数 (1 + 52),其结果为 2^0 到 2^53-2^0 的整数范围。
真正的 SP 精度是“24 个连续的二进制精度数字”。
如果您可以以 50 个单位增量使用美分,您的 SP 范围将是 2^-1 到 2^23-2^-1 或 0.5 到 8388607.5
如果您可以以 25 个单位增量使用美分,那么您的 SP 范围将是 2^-2 到 2^22-2^-2 或 0.25 到 4194303.75。