【问题标题】:How to truncate value after decimal point [closed]如何截断小数点后的值[关闭]
【发布时间】:2014-09-29 01:00:00
【问题描述】:

用户输入这样的双精度值:2423242.6789。只扫描 2423242 怎么办?

【问题讨论】:

  • 为什么不直接读取浮点数然后转换为 int?
  • 我已经尝试过 (int) x,但它似乎不起作用
  • “它似乎不起作用”是什么意思?你做了什么,你期望结果是什么?演员是如何未能达到这些期望的?

标签: c truncate


【解决方案1】:

假设一个正数,使用floor()

#include <math.h> 

double x;
scanf("%lf", &x);
x = floor(x);
// or 
x = x < 0.0 ? ceil(x) : floor(x); // to cope with + and - doubles

【讨论】:

  • 感谢您的回答。还是不行
  • @Cailou 发布您的 1) 代码 2) 输入 3) 看到的输出和 4) 期望的输出。
  • 双jdn; printf("输入一个大于 2299160 的 JDN:";scanf("%f", &jdn); lc = jdn + 68569; nc = ((4 * lc) / 146097); lc = lc - ((146097 * nc + 3) / 4); ic = ((4000 * (lc + 1)) / 1461001); lc = lc - ((1461 * ic) / 4) + 31; jc = ((80 * lc) / 2447); day = lc - ((2447 * jc) / 80); lc = (jc / 11); 可以看到,计算只需要小数点前的值。
  • @Cailou ,使用%lf 扫描double 或将jdn 声明为float
  • @Cailou 1) 使用scanf("%lf", &amp;jdn); (加l) 2) lc, nc,jc,day 是什么类型? 3) 输入是什么?
【解决方案2】:

一种方法是使用整数说明符,例如

unsigned long long x;
if ( 1 != scanf( "%llu", &x ) )
      // error handling...

但是,如果输入不适合 x,则会导致未定义的行为。

更可靠的方法是将字符读入缓冲区(例如通过fgets),然后使用strtoul 转换为整数。

【讨论】:

  • 感谢您的意见。我以前没见过那些东西。一定会研究它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2019-03-01
  • 1970-01-01
相关资源
最近更新 更多