【问题标题】:How to get fractions in an integer division?如何在整数除法中获得分数?
【发布时间】:2010-06-04 16:30:47
【问题描述】:

如何在 C 中将两个整数相除并得到双精度或浮点数答案?

【问题讨论】:

  • “十进制”是一种表示形式(如“十六进制”、“八进制”、“二进制”),适用于整数或非整数。我猜你的意思是“得到一个非整数结果”。
  • 这是通过整数除法获得分数(有理数)printf("%d %d/%d" x/y, x%y, y); 的方式。您确定不想要非整数结果吗?

标签: c integer-division


【解决方案1】:

您需要将其中一个或另一个转换为 floatdouble

int x = 1;
int y = 3;

// Before
x / y; // (0!)

// After
((double)x) / y; // (0.33333...)
x / ((double)y); // (0.33333...)

当然,请确保您将分区的结果存储在doublefloat 中!如果您将结果存储在另一个 int 中,这对您没有任何好处。


关于@Chad 的评论(“[tailsPerField setIntValue:tailsPer]”):

当您有setDoubleValue 等可用时,不要将双精度或浮点数传递给setIntValue。这可能与我在评论中提到的问题相同,您没有使用显式强制转换,并且您得到的值无效,因为双精度值被读取为 int。

例如,在我的系统上,文件:

#include <stdio.h>
int main()
{
    double x = 3.14;
    printf("%d", x);
    return 0;
}

输出:

1374389535

因为试图将 double 读取为 int。

【讨论】:

  • 对。在执行除法之前转换整数。
  • 双倍;双x; x = tn; //(tn 是一个 int) 通常 10 tp = x/fn; // fn 也是一个 int(通常为 5)但我仍然得到 0
  • @Chad:代码看起来不错。您如何确定结果为零?你在做类似printf("%d", tp) 的事情吗?这会尝试将 double 的内容打印为 int,但您不会得到正确的结果。如果你这样做了,你的编译器应该警告你。对于双精度字符串,格式字符串为%lf
  • 它实际上被发送到一个gui... tailsPer = tailsNum / ((double)curNum); //tailsper 是一个双精度 [tailsPerField setIntValue:tailsPer]; // 这是在可可中
【解决方案2】:

使用类型转换。 例如,

main()
    {
        float a;
        int b = 2, c = 3;
        a = (float) b / (float) c;     // This is type-casting
        printf("%f", a);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多