如何使用自己的函数将浮点数向上和向下舍入到c ++?

时间:2019-02-21 15:05:31

标签: c++ function rounding

double round(double a)
{
    double b, c, f, g;
    float d[2];
    c = modf(a, &b);
    if (a > 0) {
        f = a - c;
        g = a - c + 1;
        d[0] = f;
        d[1] = g;
        return d[0], d[1];
    }
    else {
        f = a - c;
        g = a - c - 1;
        d[0] = f;
        d[1] = g;
        return d[0], d[1];
    }
}

我需要在末尾得到2个数字(例如:如果我有数字12.34,我想得到12和13)这是我对pos和neg取整的功能。但是它只返回1个值(((所以我是stack ... pls,请帮助返回2个值?

2 个答案:

答案 0 :(得分:1)

您不能在返回中返回两件事,因此return d[0],d[1]可以编译,但是不能按预期工作。您可以在函数原型中使用两个参考参数来返回。类似于void round(double a, double* result1, double* result2)。在函数中,将d[0]设置为*result1,将d[1]设置为*result2

另一件事:确定a为负时行g = a - c - 1;是否正确?我认为您需要执行g = a + c - 1;,因为a为负数。

答案 1 :(得分:0)

#include "pch.h"
#include <iostream>
#include <array>
using namespace std;

auto rounding(double x)
{
    int part = static_cast<int>(x);
    if (x < 0.0)
    {
        return array<int, 2> {
            part - 1, part
        };
    }
    else
    {
        return array<int, 2> {
            part, part + 1
        };
    }
}

int main()
{
    double x;
    cout << "Please, enter a float number to round: ";
    cin >> x;

    auto r1 = rounding(x);
    if (x > 0) {
        cout << "A lower value: " << r1[0] << endl << "A bigger value: " << r1[1];
    }
    else {
        cout << "A bigger value: " << r1[0] << endl << "A lower value: " << r1[1];
    }
}