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

时间:2019-05-09 04:45:51

标签: visual-c++ mfc

我必须将double值转换为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;

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果您想要简单的截断而不是四舍五入,则可以使用3个小数点进行格式化,然后截断结果:

mcc

但这也可行:

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

// str contains now "4217.08"