簡體   English   中英

舍入到浮點數的源代碼

[英]Source code to round floating point number

除了使用諸如ceilfloor任何內置函數外,如何舍入浮點數?

我想將2.10轉換為2.14-> 2.1並將2.15轉換為2.19-> 2.2

我寫了一些邏輯但是卡在中間

    float a = 2.24;
    int b = a*100;
    int result n, i =0;
    while(i>2)
    {
        n = b%10;
        i++;
    }
    if(n >5)
    {
      c = b%10;
      c = c/10 + 1;
    }

我嘗試了很多inbuild函數,但是對於我的diab編譯器來說,所有這些都不起作用

//  totalDist = roundf(totalDist * 10) / 10.0;      
//  totalDist = floor(totalDist * pow(10., 1) + .5) / pow(10., 1);  
    totalDist = floorf(totalDist * 10 + 0.5) / 10;

打算寫自己的邏輯

float a = 2.24;
float b = roundf(a*10.0f)/10.0f;//roundf in C99

嘗試int((x + 0.05) * 10.0) / 10.0

您也可以使用trunc代替int的轉換。

或者您可以使用roundround(x * 10.0) / 10.0

如果您只想四舍五入以用於輸出目的,那么%.1f格式字符串確實是正確的答案。

printf("%.1f", 2.14);

或者,如果您實際上想舍入價值,那么類似的工作

#include <math.h>

float val = 37.777779;

float rounded_down = floorf(val * 100) / 100;   /* Result: 37.77 */
float nearest = floorf(val * 100 + 0.5) / 100;  /* Result: 37.78 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 37.78 */

通常我們使用nearest方法

BLUEPIXY的答案很好。 但總的來說; 浮點乘法比除法快,所以如果速度合適的話; 乘以0.1,而不是除以10。

因為我的舊答案需要很多仔細的編程才能使其起作用

我提出了另一種實現舍入功能的方法:

您可以輕松地檢查(正/負)數字是否被向上或向下四舍五入(加/減)0.5。 然后,您可以截斷結果並得到答案。 另外,為了根據需要支持更深層次的舍入,可以讓用戶指定舍入和舍棄的舍入位數為多少位,瞧:

long double round_f(long double number, int decimal_places)
{
     assert(decimal_places > 0);

     double power = pow(10, decimal_places-1);
     number *= power;

     return (number >= 0) ? ((long long)(number + 0.5))/power : ((long long)(number - 0.5))/power;
}

在這里,您可以看到一個有效的示例。

舊的:

您可以使用sprint:

#include <stdio.h>

int main(void)
{
    float a = 2.24;
    int size;
    char num[8] = {0};
    sprintf(num, "%d", (int) (a * 100));

    for (size=0; num[size]; size++);

    size--;

    if (num[size] < '5') {
        num[size] = '0';
    } else {
        num[size] = '0';
        if (num[size-1] == '9')
            num[size-1] = '0';
        else
            num[size-1]++;
    }

    printf("a = %f\n", a);
    printf("num = %s\n", num);

    return(0);
}

您可以看到邏輯。 最后,您可以將字符串還原為整數並乘以100。

編輯:這只是邏輯。 請參閱下面的評論,以了解充分工作所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM