货币数据的Visual C++舍入问题

Nay*_*iya 3 c++ floating-point

在我的财务相关应用程序中,Double用作货币数据的数据类型.但最近我发现Double在舍入时有问题.

例如,
存储为357549999999999999999999 35.75 的双变量35.25 内存储为35.750000000000000000001

那么什么时候它试图将数字四舍五入到一个小数点35.25 = 35.3 35.75 = 35.8

这意味着从地板到圆形天花板的一个数字.

  1. 有人可以为这个问题提出解决方案吗?

  2. 在Visual C++中,适用于货币数据的数据类型是什么

Bla*_*ke7 6

IEEE-754不同的数据类型定义为具有不同电平的显著数字.

例如,IEEE-754 将double定义为仅具有15.95十进制精度数字.

因此,一个选项是通过将最终值四舍五入到小于此最大限制的一些有效数字,确保保持在最大精度范围内.

但是你如何舍入通常是由你正在进行的金融计算类型预先定义的.

例如,外汇现货价格通常被引用到4个十分位数,而利率被引用到7个小数位.

因此,如果没有更多关于您正在进行何种计算的信息,那么提供解决方案有点困难.