变量float到double值转换,舍入到小数点后1位

时间:2014-12-11 11:40:07

标签: c++ winapi com double rounding

我有VT_R4 / float类型的变体,值为" 2.550000"当使用VariantChangeType()将其转换为double时,VT_R8 / double类型值变为" 2.54999999998"。

::VariantChangeType(&var, &var, 0, VT_BSTR);
::VariantChangeType(&var, &var, 0, VT_R8);
double dOutputValue = var.dblVal; 

使用

四舍五入时的双倍
output.Format(_T("%3.1f"), dOutputValue);

给出值2.5,而不是预期的2.6。

请建议。

1 个答案:

答案 0 :(得分:1)

  

我有VT_R4 / float类型的变体,值为" 2.550000"。

不,你没有。该值在二进制浮点类型中不能完全表示。 closest single precision value to 2.55是:

  

2.5499999523162841796875

如果您希望准确表示2.55,则需要使用十进制数据类型而不是二进制数据类型。

相关问题