C++ 浮点数的四舍五入小数

C++ 浮点数的四舍五入小数,c++,visual-c++,integer,cocos2d-x-3.0,C++,Visual C++,Integer,Cocos2d X 3.0,在VC++中,我有一个浮点数,比如1.32544354353 i、 efloat num=1.32544354353 我只想要点后的第一个1位数。i、 e 1.3(不是1.300000000)。 我怎么能得到这个? 请帮帮我。。。 如果它们是Cocos2dx中的解决方案,那就更好了(我想在我的cocos2d-x游戏中使用它)试试类似的方法 float val=1.32544; float num=(float)(((int)(val*10))/10.0); 但是要小心溢出。尝试以下方法: #i

在VC++中,我有一个浮点数,比如1.32544354353 i、 e
float num=1.32544354353
我只想要点后的第一个1位数。i、 e 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;  

double d=1.32544354353;

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

答案取决于你想要的结果是什么类型

如果您希望以
float
的形式获得结果,那么这是不可能的。从
float
的角度来看,1.3和1.3000000000是完全相同的值,不能让
float
持有1.3而不是1.3000000000。在这里,您可以使用,例如,
(int)(val*10)/10.0
,删除额外的数字。(但是,浮点数精度问题不会使结果精确到1.3,它将是第1.29999982行或1.3000000029行,末尾有一些随机数字。)

如果需要字符串(一般意义上的字符串)表示,则可以生成字符串
“1.3”
。要获得此值,请使用精度说明符 例如
“%.1f”
std::setprecision(1)


现在我有一个字符串1.3

谢谢。但是我得到的num值是1.2999995!这就是浮子精度的问题。行“float val2=1.3;”结果也达到了1.29995。你得用双倍的。谢谢。但是没有达到预期的效果。f的答案是1.2999995。@托尼:这是由于浮点表示法的特殊性。你可以试着用我回答的最后一个wau,或者用两个。@Tony:-这里有一个很好的读物:谢谢你的回答。我想在Cocos2dx标签中显示它。因此,最好以std::字符串的形式输出。请问如何为std::string变量分配“%.1f”?@Tony,对于
std::string
输出,更好的方法是使用
std::stringstream
std::setprecision(1)
,而不是
“%.1f”
。这不是严格意义上的四舍五入,而是转换为字符串。为了得到一个浮动值,你会怎么做?
("%.1f", 1.32544354353);
double d = 1.32544354353;
std::cout << std::fixed << std::setprecision(1) << d << std::endl;
char str[50];
sprintf(str, "%.1f",1.324567);