2014-09-29 85 views
-2

用戶輸入如下所示的double值:2423242.6789。我能做些什麼只掃描2423242?如何截斷小數點後的值

+0

爲什麼不只是讀取float然後轉換爲int? – cegfault 2014-09-29 01:01:52

+0

我試過(int)x,它似乎不起作用 – Cailou 2014-09-29 01:56:46

+0

「它似乎不工作」是什麼意思?你做了什麼,你期望的結果是什麼?結果是什麼,演員如何不能達到這些期望? – 2014-09-29 02:25:01

回答

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 
+0

感謝您的回答。它仍然不起作用 – Cailou 2014-09-29 01:57:03

+0

@Cailou發佈你的1)代碼2)輸入3)看到的輸出和4)期望的輸出。 – chux 2014-09-29 01:58:45

+0

double jdn; 的printf( 「輸入JDN大於2299160: 」; 的scanf(「 %F」,&jdn); LC = JDN + 68569; NC =((4 * LC)/ 146097); LC =液相色譜 - ((146097 ((*)* nc + 3)/ 4); ic =((4000 *(lc + 1))/ 1461001); lc = lc-((1461 * ic)/ 4)+31; jc = (2447 * jc)/ 80); lc =(jc/11); 正如您所見,只需計算小數點前的值即可。 – Cailou 2014-09-29 02:04:24

0

一種方法是使用一個整數說明符,例如

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

然而,這會導致不確定的行爲,如果輸入沒有融入x

更可靠的方法是將字符讀入緩衝區(例如,通過fgets),然後使用strtoul轉換爲整數。

+0

感謝您的輸入。我以前沒見過這些東西。一定會研究它們。 – Cailou 2014-09-29 02:16:35