所以我刚收到我的论文。它说如果输入数字是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 ...
注意:我在地板上尝试过,所以我想我的逻辑有些错误
答案 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...