如何将浮点数分为2或3

时间:2018-10-12 16:59:53

标签: c

所以我刚收到我的论文。它说如果输入数字是0.001001001(重复),它将打印0.001...,如果是0.015015015,则打印0.015...,如果数字是{{1} }它应为998,我的想法是将其分为2个部分,但我仍然无法弄清楚。谢谢

0.998...

input = 3个整数,除以999,该值小于999

输出=结果,如果结果重复(0.001001001),则它将打印出0.001 ...

样本:

输入=输出

3 = 0.003 ...

10 = 0.010 ...

998 = 0.998 ...

注意:我在地板上尝试过,所以我想我的逻辑有些错误

2 个答案:

答案 0 :(得分:0)

由于该值低于 999,不包括999 ,因此只需读取整数,然后使用reverse(lat, lng, cb) { var url = "http://nominatim.openstreetmap.org/reverse?format=jsonv2"; url += "&email=example@example.com"; url = url.trim(); url += "&lat=" + lat; url = url.trim(); url += "&lon=" + lng; url = url.trim(); request.get( { url: url, headers: {'User-Agent': "Logbook", Referer: "http://www.google.de"}, timeout: 5000 }, function(err, res, data) { if (err) { console.log("ERROR"); cb(err); } else { var json; try { json = JSON.parse(data); cb(null, res, json); } catch(e) { cb(true); } } } ); } 打印即可:

0.%03d...

转换规范int num; scanf("%d", &num); printf("0.%03d...\n", num); 将以10为基数打印给定的整数,并以前导零开头,以便其至少3个字符宽。对于3,它将打印%03d,对于003,它将打印10,对于010,它将打印976

您具体不能做到这一点的是浮动。您计算机中的浮点数是二进制数,它们不能精确地产生小数部分...也不能做到无限精度。

答案 1 :(得分:0)

如果x接近0.abcabcabc ...模式,则比例尺将以* 999,然后是/ 1000。

   abc.abcabc...     1000x
-    0.abcabcabc...     1x
-------------------
   abc.               999 x
/ 1000
-------------------
     0.abc

从数学上讲,这可以精确到3位数字。但是我们正在与double合作。

double通常编码为binary64,不能精确表示0.001 ...,0.015 ...,0.998 ...,因此上述想法将导致值非常接近预期值。 * 999/ 1000步骤也可能与数学结果相差很小。

int cajunb_print(double x) {
  printf("(before %.*e) ", DBL_DECIMAL_DIG, x);
  x = x * (1000 - 1) / 1000;
  printf("(after %.*e) ", DBL_DECIMAL_DIG, x);
  return printf("%.3f...\n", x);
}

int main(void) {
  cajunb_print(0.001001001001001001);
  cajunb_print(0.015015015015015015);
  cajunb_print(0.998998998998998998);
  return 0;
}

输出

(before 1.00100100100100099e-03) (after 1.00000000000000002e-03) 0.001...
(before 1.50150150150150149e-02) (after 1.49999999999999994e-02) 0.015...
(before 9.98998998998999022e-01) (after 9.97999999999999998e-01) 0.998...