假设我列出了一个乘以91,875的值列表,并使用Round to even(又名Banker'舍入)方法进行舍入。这是前20个倍数:
0 0
91,875 92
183,75 184
275,625 276
367,5 368
459,375 459
551,25 551
643,125 643
735 735
826,875 827
918,75 919
1010,625 1011
1102,5 1102
1194,375 1194
1286,25 1286
1378,125 1378
1470 1470
1561,875 1562
1653,75 1654
1745,625 1746
假设在这些值之间,我的系统接收其他值。我需要检查哪一个是原始91,875
步骤的多个,哪些不是。
实施例。从我得到的清单:
3583 (before rounding it was 91,875 * 39 = 3583,125)
3584
在这种情况下,我知道选择的值仅为3583,因为:
lrint(91,875 * 39) = 3583
并丢弃3584,这只是介于3583和下一步之间的值:
lrint(91,875 * 39) = 3583
lrint(91,875 * 40) = 3675
我该如何选择它?获得值后,我没有39
和40
。我试过了:
int times = round(currentSample / samplesPerPulse);
double diff = abs(samplesPerPulse * times - currentSample);
if (diff < 1) {
... do somethings
}
currentSample
分别为3583和3584以及samplesPerPulse
91,875,但即使3584 diff
低于1。
答案 0 :(得分:1)
请尝试以下方法:
if((lrint(floor(currentSample / samplesPerPulse) * samplesPerPulse) == currentSample) or
(lrint(ceil(currentSample / samplesPerPulse) * samplesPerPulse) == currentSample)
)
{
.... do something
}