2016-11-19 9 views
0

Как я могу округлить число на 5 десятичных чисел некоторого результата? у меня есть что-то вроде этого ...Круглые номера перед оператором

double s; 
s=d/a;s1=d1/a1; 
here i need to round these 2 numbers ... because s1 is different from s by 0.00000002 etc 
if(s1>s){ 
printf("S1 > S"); 
    if(s1==s){ 
printf("S1 = S"); 

кто-то с помощью с этим? Спасибо

+0

Возможный дубликат [Что является лучшим способом сравнения поплавков для почти равенства в Python?] (Http://stackoverflow.com/questions/5595425/what-is-the-best-way-to-compare- floats-for-почти-equal-in-python) – woockashek

ответ

-1

Что вам нужно, это %.5f в функции printf. Если это используется для сравнения, попробуйте этот подход:

float value = number; 
float rounded = ((int)(value * 100000 + .5)/100000.0); 

Итак, за 2 номера с вышеуказанной процедурой, а затем попробуйте.

+0

Я пробовал это, но мой оператор if дал мне плохой результат ... если у меня есть s1 = 6.00000002 и s = 6.0000000, это будет s1> s, и я хочу его округлить до my if для s1 = s – blackroad

+0

Я уверен, что OP не просит печати, но сравнение – woockashek

+0

я попробовал \t s1 = roundf (s1 * 100)/100; \t \t s = roundf (s * 100)/100; но он округлен для 3 или 2 десятичных чисел – blackroad

0

Круглые числа ранее (сравните) заявление

шкала на 100000, раунд до целого числа, а затем сравнить.

Не нужно делиться масштабированием и вводить больше вычислительных ошибок для сравнения.

#include <math.h> 
int compare_rounded(double a, double b, double scale) { 
    // or use round(), nearby() 
    a = rint(a*scale); 
    b = rint(b*scale); 
    return (a > b) - (a < b); 
} 

ИЛИ, возможно, более просто вычитать. Это дает несколько разные результаты. Все зависит от того, что хочет OP.

int compare_rounded2(double a, double b, double guard) { 
    double diff = a-b; 
    if (diff < -guard) return -1; 
    return diff > guard; 
} 

затем вызвать одну из 2

double s =d/a; 
double s1 =d1/a1; 
int cmp = compare_rounded(s1,s, 100000.0); 
// or 
int cmp = compare_rounded2(s1,s, 100000.0); 
if (cmp > 0) { 
    puts("S1 > S"); 
} else if (cmp == 0) { 
    puts("S1 == S"); 
} else { 
    puts("S1 < S"); 
} 

Чтобы справиться с обоими номерами около того же предела double как DBL_MAX, дополнительный код требуется, это первая функция из-за переполнения a*scale.

 Смежные вопросы

  • Нет связанных вопросов^_^