C++ 如何去除C+中的浮动剩余物+;

C++ 如何去除C+中的浮动剩余物+;,c++,floating-point,C++,Floating Point,我想删除浮子剩菜,同时保留其类型 (即3.14159f应变为3.0f) 到目前为止,我能做的是铸造两次类型 float f = 3.14159f; float r = static_cast<float>(static_cast<int>(f)); float f=3.14159f; 浮动r=静态施法(静态施法(f)); 这是正确的方法吗?还是有更简单的方法 先谢谢你 这是正确的方法吗 没有 还是有更简单的方法 一次浇铸就足够了: float r = static_

我想删除浮子剩菜,同时保留其类型

(即3.14159f应变为3.0f)

到目前为止,我能做的是铸造两次类型

float f = 3.14159f;

float r = static_cast<float>(static_cast<int>(f));
float f=3.14159f;
浮动r=静态施法(静态施法(f));
这是正确的方法吗?还是有更简单的方法

先谢谢你

这是正确的方法吗

没有

还是有更简单的方法

一次浇铸就足够了:

float r = static_cast<int>(f);
float r=静态浇铸(f);

正如@Baum-mit-Augen在他们的文章中所说:


“对于不适合
int
的值,此操作失败。”


因此,使用正确的错误处理可以解决该问题。

这是一种正确的方法,但您也可以使用floor:

std::cout << std::floor(3.14f); // prints 3
std::cout清除剩余物的操作称为截断。C++提供了函数来完成(包括代码> <代码>标题):


您可以将int赋值给float,但它仍然是float。
f=std::trunc(f)
这应该是一条注释@苏拉吉斯:你觉得它以什么方式无法回答这个问题?对我来说,这似乎是一个答案。@SurajS为什么?有一个明确的问题,我回答了。仅仅因为这是一个相当简单的问题,并不意味着它是离题的,不是吗?对于不适合
int
@Baum-THX的值,这是失败的。我在回答中采用了这一点。当我使用trunc()而不是static_cast()时,会有任何性能开销吗?@ZackLee这是在证明
std::trunc
对于您的用例来说太慢,并且为了正确性只使用if之后才应该担心性能的情况之一。@ZackLee很有可能调用将包含一条内联指令。@dasblinkenlight不应该是std::truncf(f)从技术上讲,是为了返回float而不是double?@Fanael:我在几个不同的版本中都这么做了,但是忘记了msse4.1标志。
float r = std::trunc(f);