c - 是否可以替换 double 并仅使用 C 中的整数编写程序,并具有相同的输出?

标签 c floating-point type-conversion int

仅使用整数类型和标准库是否可以编写这样的程序 <stdio.h>在C语言中?余数的输出必须显示为十进制数,逗号后面有两个数字。

#include <stdio.h>

int num1 = 0;
int num2 = 1;
int num3 = 6;
int num4 = 3;
int num5 = 7;
int num6 = 3;
int num7 = 9;
int num8 = 8;

int sum, product, Result;
double division;

int main()
{
    sum = num1 + num2 + num3 + num4;
    product = num5 * num6 * num7;
    Result = ((++product) - (sum++)) * sum;

    int Integer_division = Result / (num8+ 1);
    int Remainder = Result % (num8+ 1);
    double division = Result / (num8+ 1);

    printf("Result = %d\n", Result);
    printf("Integer division = %d\n", Integer_division);
    printf("Remainder = %d\n", Remainder);
    printf("Division = %.02f\n", division);

    return 0;
}

我正在考虑将其分成两半并在中间用逗号打印(%d.%d) 但这听起来像是我最后的手段......

提前致谢。

最佳答案

要从整数打印类似浮点的文本,需要符号、while-number 部分和小数部分

char *sign = Result<0 ? "-":"";
int whole = abs(Integer_division);
char decimal_point = ',';  // behind the comma.
int hundredths = abs(Remainder *100/(num8+ 1));  // Convert fraction to 

1/100

// now print it
printf("%s%d%c%02d", sign, whole, decimal_point, hundredths);
<小时/>

然而这仅显示截断的结果。 是工作。

使用整数模拟浮点输出的常用方法是将值视为 2 个整数部分的分数:需要缩放的分子分母(例如 x100 为.00 显示)。为简单起见,假设分母 > 0

由于显示精度有限,第一步是舍入。由于下一步将涉及整数除法“向零截断”,并且类似浮点的显示通常是“舍入到最接近的”,因此代码需要添加一个有符号的、未缩放的 0.5 或分母的二分之一。

为了简单起见,假设分母 > 0 并且是奇数,这样我们就可以避免半途而废的情况(甚至更多的工作)。还假设没有 int 溢出以避免更多工作。

int numerator = Result;
int denominator = num8+ 1;
int scale = 100; // to print to 0.xx

int scaled_numerator = numerator * scale;
int scaled_half = denominator / 2;
if (scaled_numerator < 0) scaled_half = -scaled_half;
int rounded_scaled_numerator = scaled_numerator + scaled_half;

现在划分

int scaled_value = rounded_scaled_numerator/denominator;

char *sign = scaled_value<0 ? "-":"";
scaled_value = abs(scaled_value);
int whole = scaled_value / scale;
char decimal_point = ',';
int hundredths = scaled_value % scale;
printf("%s%d%c%02d", sign, whole, decimal_point, hundredths);

关于c - 是否可以替换 double 并仅使用 C 中的整数编写程序,并具有相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46780715/

相关文章:

c - 节点作为指针

c - 当 MACRO 不包含任何内存位置时,为什么 sizeof(MACRO) 给出 4 个字节的输出?

swift - 不能使数字为负

c# - System.Array 到列表的转换

c - 将静态变量传递给函数

c - 指针的指针在被释放后开始疯狂

java - 为什么 Java 中浮点型(32 位)的指数是 -126 而不是 -128?

java - java中如何将Integer的某些操作的结果存储到不同的数据类型中

c++ - operator bool() 转换为 std::string 并与 operator std::string() 冲突

c# - 如何管理从字符串到 int 的这种转换?