使用C ++中的舍入将正浮点数组转换为无符号短数组

时间:2016-01-22 21:13:20

标签: c++ arrays rounding

我有一个正的浮点数组,并希望将此数组转换为带有舍入的无符号短数组。我怎样才能以有效的方式做到这一点?这是一个例子:

usArr[] = {1, 1, 2, 2, 3}

但是,它只会进行转换,因为它基本上复制了前两个字节。结果是usArr[] = {1, 2, 2, 3, 3}。我的问题是如何将此浮点数组转换为舍入而不是转换为-processIdentifier?谢谢,我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:3)

您似乎希望舍入到最近而不是向下舍入std::round将帮助您解决此问题。使用std::transform一步完成舍入和复制:

#include <algorithm>
#include <iostream>
#include <cmath>

int main()  
{
    float floatArr[] = {1.2, 1.8, 2.1, 2.5, 3.2};
    unsigned short usArr[5];

    // (1) Using a lambda to choose correct overload:
    std::transform(floatArr, floatArr + 5, usArr, [](float f){ return std::round(f); });

    // (2) Using static cast to enforce that specific overload is called:
    std::transform(floatArr, floatArr + 5, usArr, static_cast<float(*)(float)>(std::round));

    for(int i = 0; i < 5; ++i)
        std::cout << usArr[i] << ' ';
 }