浮点数的四舍五入

Round decimal for a float number

in VC++ 我有一个浮点数 1.32544354353 即 float num=1.32544354353; 我只想要点后的前一位数字。即 1.3(不是 1.300000000)。 我怎样才能得到这个? 请帮我... 如果他们是 Cocos2dx 中的解决方案,那就更好了(我想在我的 cocos2d-x 游戏中使用它)

试试

float val=1.32544;
float num=(float)(((int)(val*10))/10.0);

但要小心溢出。

试试这个:

#include <math.h>

float x= 1.32544354353;
float f = roundf(x* 10) / 10;  

如果你只想打印它,那么你可以简单地使用这样的格式说明符:

("%.1f", 1.32544354353);

double d = 1.32544354353;
std::cout << std::fixed << std::setprecision(1) << d << std::endl;

我想到的第一件事是你可以将它乘以 10(你会得到 13)然后将它转换为 int(所以点后没有更多数字)然后将它除以 10 以浮动(你会得到 1.3)

答案取决于您希望结果是什么类型。

如果要得到float的结果,那是不可能的。从 float 的角度来看,1.3 和 1.300000000 是完全相同的值,您不能拥有包含 1.3 而不是 1.300000000 的 float。您在这里可以做的是使用 (int)(val*10)/10.0 等删除多余的数字。 (但是,浮点数精度问题不会使结果正好是 1.3,它会是 1.2999999982 或 1.3000000029 行,最后有一些随机数字。)

如果你想要一个字符串(一般意思是字符串)表示,那么你可以生成一个字符串 "1.3"。为此,请使用精度说明符 例如 "%.1f"std::setprecision(1).

char str[50];
sprintf(str, "%.1f",1.324567);

现在 str 有一个字符串 1.3