2013-05-08 74 views
4

簡單的C++問題,所以你可以看到它創建一個表並輸入變量a和變量t答案,問題是我不知道如何修復if()。你可以看到它有一個錯誤(錯字)。我不知道如何識別變量t是否有例子:11.5,如果數字有1(這裏的東西和它比數字大,)然後調用一個條件,否則調用其他條件。C++提取十進制解決方案錯誤

int a,b = 18; 
double t; 

for (a = 0; a <= b; a++) 
{ 
    t = 8 + (double)(18 - a)/2; 
    if (t >= *.1) 
     cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl; 
    else 
     cout << setw(9) << a << setw(20) << t << endl; 
} 

嘗試:

#include <iostream> 
#include <iomanip> 
#include <cmath> 
#include <math.h> 

using namespace std; 
int main() 
{ 
    int a,b = 18; 
    double t; 

    for (a = 0; a <= b; a++) 
    { 
     t = 8 + (double)(18 - a)/2; 
     if (modf(t, NULL) >= 0.1) 
     cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl; 
     else 
      cout << setw(9) << a << setw(20) << t << endl; 
    } 

} 

定格在我自己的方式,還是感謝 'Angew' 他是第一個發佈MODF():

#include <iostream> 
#include <iomanip> 
#include <cmath> 
#include <math.h> 

using namespace std; 
int main() 
{ 
    int a,b = 18; 
    double t,z; 
    int k; 

    for (a = 1; a <= b; a++) 
    { 
     t = 8 + (double)(18 - a)/2; 

     if (modf(t, &z) >= 0.5) 
     cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl; 
     else 
      k = t; 
      cout << setw(9) << a << setw(20) << k << endl; 
    } 
} 

回答

4

你或許在尋找std::modf

double wholePart; 
if (std::modf(t, &wholePart) >= 0.1) 
+0

嗯,但codeblock顯示錯誤,沒有聲明nullptr?也許我錯過了一些圖書館? – karolis 2013-05-08 14:21:10

+0

@karolis我已經擴展了答案。 – Angew 2013-05-08 14:27:47

+0

現在它顯示modf沒有在這個範圍內聲明,對不起,我想我使用的是真正的老C++。對不起,也許沒有更新我的代碼塊等麻煩,還有另一種方式? – karolis 2013-05-08 14:31:41

1

這將找到的小數部分您的號碼:

double num = 23.345; 
int intpart = (int)num; 
double decpart = num - intpart; 
//decpart = .345 

As BoBTfish me提到,這可能會成爲一個大數字的問題。另一個可能的(安全)的解決方案是:

double integral; 
double fractional = modf(some_double, &integral); 

這一點,你如果成爲..

if(t_decpart >= .1) 
    // 
+0

https://ideone.com/EsNajH(即'(INT)someDouble '問是否有問題) – BoBTFish 2013-05-08 14:21:02

+0

我覺得你不明白我的問題,但從你我是一個想法如何做到這一點,我們需要回答 - int然後我們會得到'.number',如果.number> = 1然後做點什麼。 – karolis 2013-05-08 14:23:53

+0

但這是一個漫長而愚蠢的做法,我想也許有一些像'天使'建議仍然不明白爲什麼它不工作。將嘗試在谷歌搜索它。 – karolis 2013-05-08 14:25:05

2

您是否試過使用模量而不是分度? (%符號)這將返回您的其餘操作。

double x = 1.1; 
x = x % 1.0; 
//x is equal to .1 

找到你的電話號碼的MOD和1將返回小數餘數,所以改變你的if語句:

if (t % 1.0 >= 0.1) 
+0

uhm ...是否與雙打一起工作? – 2013-05-08 14:22:10

+0

問題:爲什麼我需要使用t%1.0,如果我需要查找.number是否大於1?請解釋或我不明白這個%如何工作。 – karolis 2013-05-08 14:28:06

+0

這不是你想要的嗎?你的代碼試圖找出小數點後的值是否大於.1,是否正確? – user2312903 2013-05-08 14:32:49