【问题标题】:Print float without using printf() in c在 c 中不使用 printf() 打印浮点数
【发布时间】:2016-02-21 22:08:06
【问题描述】:

我正在尝试编写我的 printf() 函数。我想打印浮点/双精度值。到目前为止,这是我设法做到的。

static void ft_float(va_list *ap, t_flag *flags)
{
  double myfloat;
  signed long int decipart;
  signed long int intpart;

  myfloat = va_arg(*ap, double);
  if (myfloat < 0)
  {
      ft_myputchar('-');
      myfloat *= -1;
  }
  intpart = (signed long int)myfloat;
  ft_putnbr(intpart);
  ft_myputchar('.');
  myfloat -= intpart;
  myfloat *= 1000000;  //upto 6 decimal points
  decipart = (signed long int)(myfloat + 0.5); //+0.5 to round of the value
  ft_putnbr(decipart);
}

正如您所看到的,出于显而易见的原因,该代码适用于 1.424352、12313.1341414 等浮点数。但当小数点后的值小于 1 时,例如 1.004243、12313.0001341 等,则不行。

【问题讨论】:

  • 你有什么问题?
  • 将浮点数正确转换为字符串is hard。另外,什么是“不起作用”?请告诉我们会发生什么。 “它不起作用”不是错误描述。
  • 没有更简单的方法来转换它们吗?
  • 这并不容易,除非您非常小心,否则您经常会得到错误的结果。有关正确执行此操作的算法,请参阅我链接的论文。您对“产生几乎正确的结果”中几乎正确的解决方案是否满意?
  • 那是因为您忽略了在宽度为 6 的字段中打印带有前导零的小数部分。

标签: c floating-point printf


【解决方案1】:

函数 printf 可用于用零填充值。标志0 将填充设置为0,宽度指定写入的最小字符数,必要时使用左侧填充。

只需 printf decipart 格式为:"%06ld"

【讨论】:

  • 谢谢你,这回答了我的问题!
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多