如何在不四舍五入小数点值的情况下获得精确的小数精度值?

How to get a exact decimal precision value without rounding the decimal point value?

我必须将双精度值转换为 CString 才能在 mfc 列表框中显示它。在显示它之前,我需要将小数点格式化为我需要的位数。

例如这里我需要将double值格式化为2位数字

double a = 4217.088;        
CString str;
str.Format("%.*lf",2,a); 

这里a的赋值为4217.088。我需要格式化的 str 值为 4217.08 但小数点值四舍五入为 4217.09

我也尝试了下面的 floor 方法,但这也给了我同样的结果。

double b;                                   
b = floor(a * 100) / 100;

是否可以在不四舍五入小数点的情况下格式化双精度值。

四舍五入根本不起作用。在您的情况下,8 中的下一个数字大于 5,因此它将下一个数字转换为 9。 要解决您的问题,以下代码应该可以解决问题:

double b = std::floor(a * 100.) / 100.;

如果您想要简单截断而不是四舍五入,您可以格式化为 3 位小数,然后截断结果:

double a = 4217.088;   
CString str;
str.Format("%.*lf", 3, a); 
str = str.Left(str.GetLength() - 1);

// str contains now "4217.08"

但这也有效:

double a = 4217.088;
str.Format("%.*lf", 2, std::floor(a * 100) /100);