浮点数的四舍五入
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
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