【问题标题】:Assigning a float value to variable将浮点值分配给变量
【发布时间】:2011-08-18 16:46:45
【问题描述】:

我想将 1.222 存储在变量 a 中。但是当我打印时它显示的是 1.222000

表示变量a存储为1.222000。但我想将值存储为1.222

一个。而且我只希望在分配 a=b 时将 1.22 复制到 b。请帮帮我

了解如何去做。

int main()
{
    float a=1.222,b;
    b=a;//(but b=1.22 and not b=1.222) how to cut the last number 2
    printf("%f\t%f",a,b);
    return 0;
}

【问题讨论】:

  • 但是这些都是一样的!这是打印问题,而不是存储问题。
  • 实际上,由于浮点精度有限,该值可能存储为1.222000

标签: c floating-point floating-point-conversion


【解决方案1】:

您不能简单地告诉浮点数在赋值期间丢失一些精度,您必须进行一些类型转换才能获得预期的结果。例如,仅保留 2 位精度:

int main()
{
    float a=1.222,b;
    b= ((long)(a * 100)) / 100.0;
    printf("%f\t%f",a,b);
    return 0;
}

【讨论】:

  • :谢谢你让我明白。
  • @Angus:您只能近似float 对象中存储2 个十进制数字(除非您的实现使用十进制浮点,这不太可能)。例如b中存储的实际值可能是1.2200000286102294921875
【解决方案2】:

您不能轻易更改存储值,因为这是分配的内存量,由数据类型和系统决定。要打印两位小数,请使用

printf("%.2f, %.2f", a, b);

【讨论】:

    【解决方案3】:

    您无法更改它的存储方式,您的问题与它的存储方式无关。您有一个打印问题。

    如果要删除多余的零,请将%f 更改为%g。但这会打印出1.222

    如果您想打印1.22 而不是1.222,请将其更改为%.2f 而不是%f

    【讨论】:

    • :感谢您的解释。我如何存储 b=a 存储 1.22 的 a 而不是 1.222 的实际值。
    • @Beata: 1.22 是一个重复的数字。
    • @sidyll:b=((int)(a*100)/100.0)... a*100 =122.2/100.0 ... 最后两个是如何被淘汰的。为什么我们要打字结果我们得到了 int。
    • @Beata:谢谢,确实最后 100 应该是 100.0,我的错。诀窍就在演员阵容中。当您将浮点数转换为 int 时,它会被截断(消除小数部分)。所以 1.222 x 100 得到 122.2,然后我们将其转换为 int,它变为 122。最后,除以 100.0 将再次将其提升为浮点并得到 1.22。 b=((int)a*100)/100.0
    【解决方案4】:

    如果你想对数字本身进行四舍五入:

    b=round(100*a)/100;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多