1

我正在使用 VariantCopyInd 。源包含 1111.199999999。然而,在 VariantCopyInd 之后,目标中的值被四舍五入为 1111.200000。我想保留原来的价值。如何做到这一点?

4

2 回答 2

0

这与 VariantCopyInd 无关,而仅仅是存在于代码中的文字在COM 变体内部使用的浮点格式中没有精确表示这一事实。

因此,除了使用 CURRENCY 类型的变体之外,没有其他方法可以实现您想要的。它的精度有限,请参阅 MSDN:

CURRENCY 类型在内部使用十进制表示,就像代码文字一样。您仍然必须在代码中提供间接初始化(来自string,而不是 float/double 文字),以防止任何不需要的表示效果。

以 8 字节二进制补码整数形式存储的货币编号,按 10,000 缩放以给出小数点左侧 15 位和右侧 4 位的定点数。这IDispatch::GetTypeInforesentation提供了922337203685477.5807 到 -922337203685477.5808的范围。

CURRENCY数据类型对于涉及金钱的计算或对于准确性特别重要的任何定点计算很有用。

于 2011-11-30T10:55:16.413 回答
-1

我从 msdn 找到了一个非常好的链接

在此处输入链接描述 该链接清楚地表明任何长度大于 15 的数字都将计算为不正确的结果。

拿2箱

1) 101126.199999999 将存储一个正确的 value ,因为长度是 15 。没有转换或精度损失 2) 111.12345678912345 将存储不正确的值,因为长度为 17 。将完成转换

于 2011-11-30T12:35:30.200 回答