c - 是否可以仅使用 C 中的 int 类型将 3.005 添加到 4.70?

标签 c floating-point int

我被要求输入两个数字,例如 3.005、3.70,然后在不使用 float 或 double 的情况下对它们进行加、减和乘。不知何故,我设法做了一些类似于我被问到的事情。我单独输入数字。如果我输入“3.005”,我首先输入 3,然后我输入 .005。但是由于 005 不等于 0.005 我遇到了问题。例如,我输入 3.005 和 4.70,当我添加它们时,我得到 7.75,这是不正确的。我该如何解决?这就是我输入值(value)观的方式。

printf("first number:");
scanf("%d.%d",&n1.integer,&n1.fraction);
printf("second number:");
scanf("%d.%d",&n2.integer,&n2.fraction);

这是我将两个值相加的函数。

int add(n1,f1,n2,f2,n1digit,n2digit){ //n1-2digit is number of digits of n1-2's fraction.
int t;
int y=1; 
int fraction;
int integer;
if (n1digit>n2digit){
    t=n1digit;

}
else if (n2digit>n1digit){
    t=n2digit;
}
else { 
    t=n2digit;
}
fraction=f1+f2;
integer=n1+n2;

int temp=fraction;
int i=0; 
while (temp>0){
    temp=temp/10;
    i=i+1;
}
if (i>t){
    integer=integer+1; 
    y=pow(10,i-1);
    fraction=fraction%y;


}
printf("%d.%d\n",integer,fraction);

最佳答案

根据您在@ruohola 的回答中发布的提示,您可以执行以下操作:

  1. 定义小数位数的最大数目,例如3 或 6
  2. 将数字作为字符串读取,使用strtol() 转换整数部分。并跳过“。”
  3. 如果小数部分比小数位数短,则附加相应的'0',因此'70'变为'700'或'700000','5'变为'500'或'500000'
  4. 使用 strtoul() 将该数字存储到另一个(无符号)整数值中

现在你有两个整数值,代表可以完成剩下的事情

关于c - 是否可以仅使用 C 中的 int 类型将 3.005 添加到 4.70?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61754725/

相关文章:

java - float 类型时出错,double 类型时无错误

c - 有没有一种可移植的方法来定义 INT_MAX?

c++ - const 引用是错误的 C++ 11

c - 如何将文字数组作为函数的输入参数传递?

c - 为什么C中的全局数组(已初始化)不完全算作PSS

c - 为什么 wchar_t 没有广泛用于 Linux/相关平台的代码中?

c - 没有'\n'的printf()在libev中不起作用

c# - Float to Double 转换 - 单元测试中的最佳断言?

c - 使用幂函数时的 float 与整数

java - 将 int[] 更改为 IntArray 导致无法在应用程序中加载图像