我已经用C语言编写了一个计算器,除了尝试将99999999 * 99999999 [8个9乘8个9]相乘时,其他所有方法都运行良好。它会自动将它们四舍五入为100 000 000.0,显然,我不希望这种情况发生。我正在使用float进行数字运算,精度最高为1。我尝试将float更改为double,但是无论如何都无法正常工作。我已经听说过有关%g的信息,但是我没有找到有关它的信息,并且不确定如何使它工作。任何帮助深表感谢!

编辑
这是我的代码:

#include<stdio.h>
#include<math.h>

int main()
{
char op;
float numberone,numbertwo;
printf("Enter the operation: ");
scanf("%f%c%f\n", &numberone, &op, &numbertwo);
switch(op) {
    case '+':
        printf("%.1f + %.1f = %.1f",numberone, numbertwo, numberone+numbertwo);
        break;
    case '-':
        printf("%.1f - %.1f = %.1f",numberone, numbertwo, numberone-numbertwo);
        break;
    case '*':
        printf("%.1f * %.1f = %.1f",numberone, numbertwo, numberone*numbertwo);
        break;
    case '/':
        if(numbertwo==0){
            printf("You cannot divide by zero.");
        }
        else{
        printf("%.1f / %.1f = %.1f",numberone, numbertwo, numberone/numbertwo);}
        break;
    case'^':
        printf("%f ^ %f = %f", numberone, numbertwo, pow(numberone,numbertwo));
        break;

    default:
        printf("Error! operator is not correct");
        break;
}
return 0;
}


当我乘以99999999 * 99999999时,结果为:100 000 000.0 * 100 000 000.0 = 10000000000000000 000.0。

最佳答案

您的程序将使用这些值,仅使用double精度,在这种情况下scanf必须使用%lf格式说明符。如果您想要更大的值,则必须学习其他答案中提到的libgmp

10-08 17:09