声明前的数字

时间:2016-11-19 19:42:47

标签: if-statement printf rounding

如何在一些结果的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");
有人帮助过这个吗?谢谢

1 个答案:

答案 0 :(得分:0)

  

在(比较)陈述之前的回合数字

缩放100,000,舍入为整数,然后进行比较。

无需除以缩放并引入更多计算错误以进行比较。

#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;
}

然后拨打其中一个

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溢出是第一个函数。