我正在使用VariantCopyInd。源包含1111.199999999。但是,在VariantCopyInd之后,该值将在目标中舍入为1111.200000。我想保留原始价值。怎么能实现呢?
答案 0 :(得分:0)
这与VariantCopyInd无关,但仅仅是代码中存在的文字与COM变体在内部使用的浮点格式中没有精确的表示。
因此,除了使用CURRENCY类型的变体之外,没有办法达到你想要的效果。它的精度有限,请参阅MSDN:
CURRENCY类型在内部使用十进制表示,就像代码文字一样。 您仍然需要在代码中提供间接初始化(来自 string ,而不是float / double文字),以防止任何不需要的表示效果。
存储为8字节,2的补码整数的货币号,按10,000缩放,给出小数点左边15位数和右边4位数的定点数。此
IDispatch::GetTypeInforesentation
提供 922337203685477.5807至-922337203685477.5808 的范围。
CURRENCY
数据类型对于涉及金钱的计算或精确度特别重要的任何定点计算非常有用。
答案 1 :(得分:-1)
我从msdn
找到了一个非常好的链接enter link description here 该链接清楚地表明任何长度大于15的数字将被评估为不正确的结果。
采取2个案例
1)101126.199999999将存储正确的值,因为长度为15。没有转换或精确损失 2)111.12345678912345将存储不正确的值,因为长度为17。转换将完成