如何检查双精度数是否有小数部分?

问题描述 投票:6回答:3

基本上我有两个变量:

double halfWidth = Width / 2;
double halfHeight = Height / 2;

由于将它们除以2,它们将是整数或小数。如何检查它们是整数还是.5?

c++
3个回答
14
投票

您可以使用modf,这应该足够了:

modf

2
投票

首先,您需要确保使用的是双精度浮点数学:

 double intpart;

 if( modf( halfWidth, &intpart) == 0 )
 {
 // your code here
 }

因为其中一个操作数是双精度数(即double halfWidth = Width / 2.0; double halfHeight = Height / 2.0; ),这将迫使编译器在进行数学运算之前将2.0Width转换为双精度数(假设它们还不是Height s) 。转换后,将以双精度浮点数进行除法。因此,在适当的地方将有一个小数。

下一步是简单地用double进行检查。

modf

1
投票

您可以丢弃小数部分,并使用floor()将结果与原始值进行比较:

modf

正如@DávidLaczkó正确指出的那样,它是比modf()更好的解决方案,因为不需要其他变量。

并且根据我的基准测试(Linux,gcc 8.3.0,优化-O0 ...- O3),在现代笔记本和服务器处理器上,floor()调用比modf()消耗更少的CPU时间。启用编译器优化后,差异甚至不断扩大。可能是因为floor()只有一个参数时,modf()有两个参数。

© www.soinside.com 2019 - 2024. All rights reserved.