如何在一些结果的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 :(得分: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
溢出是第一个函数。