【问题标题】:Can the precision of a floating point number be dynamically changed in C?浮点数的精度可以在C中动态改变吗?
【发布时间】:2021-10-17 10:51:17
【问题描述】:

有没有办法让用户输入,然后用它来决定输出数字的精度应该是多少?

我的意思是我有一个函数来获得用户想要的精度,然后我希望能够使用输入的数字来决定应该显示多少个小数位。通常在您创建程序时,您可以这样决定:printf("The number is: %0.2f", number);,但是 %0.2f 是否也可以动态更改,以便用户可以决定它应该是 0.2、0.3、0.4 等吗?

【问题讨论】:

  • 动态选择输出精度很简单,例如prec = 5; printf("%.*f\n", prec, f);
  • 如果你想在用户输入时检测浮点数的精度,这有点棘手,而且没有标准功能,所以你必须自己做。请参阅this recent question 的答案。
  • 最后,请注意,一旦您将用户的输入转换为 floatdouble 变量,就很难(基本上不可能)发现用户最初输入它的精度, 因为这些数字在内部存储在 binary 中。例如,如果您输入 12.34 并将其存储在 float 中,则内部表示是相当于 12.340000152587890625 的二进制数,因此您无法判断用户输入的是 12.34 还是 12.3400001 还是 12.34000015 或类似的东西。

标签: c precision


【解决方案1】:

%0.2f 是否也可以动态更改,以便用户决定它是否应该是 0.2、0.3、0.4 等?

是的。

int prec = 2;
printf("The number is: %0.*f", prec, number);

在运行时将prec 更改为您想要的。

【讨论】:

    【解决方案2】:

    将用户的输入读取为字符。测试用户的输入是否是可接受的形式。计算用户输入的位数。 (您可以根据自己的选择计算总位数或仅计算小数点后的数字,如果有的话。)然后将记录的字符转换为浮点数(例如,使用strtod 函数)。

    打印时,使用%.*f固定小数点后位数或%#.*g固定有效位数(数字中从第一个非零位到最后一个非零位的总位数数字)。对于这些选项中的任何一个,将两个参数传递给printf:第一个是位数,第二个是要打印的数字。

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      相关资源
      最近更新 更多