首页 > 解决方案 > float 忽略 c 中小数点后的数字

问题描述

我正在尝试使用边缘是随机的苍鹭公式(我使用 u 而不是 s)找到三角形的面积,并且当边缘的总和为奇数时,我的浮点数会忽略小数点后的数字。

这是我的代码的一部分:

srand(time(0));

    triangle_1.a = rand() % 50;
    triangle_1.b = rand() % 50;
    triangle_1.c = rand() % 50;
    
    do
    {
        triangle_1.a = rand() % 50;
        triangle_1.b = rand() % 50;
        triangle_1.c = rand() % 50;
    } 
    while (triangle_1.a + triangle_1.b <= triangle_1.c | triangle_1.a + triangle_1.c <= triangle_1.b | triangle_1.b + triangle_1.c <= triangle_1.a);

    float area, u;

    u = (triangle_1.a + triangle_1.b + triangle_1.c) / 2;

    area = sqrt(u * (u - triangle_1.a) * (u - triangle_1.b) * (u - triangle_1.c));

    printf("%d, %d, %d, %f, %f", triangle_1.a, triangle_1.b, triangle_1.c, u, area);

这是输出:

38、37、36、55.000000、565.482117

因为 u 是 55 而不是 55.5,所以面积也不正确。关于为什么会发生这种情况的任何想法?

标签: c

解决方案


推荐阅读