2016-10-23 16 views
16

Tôi đang cố gắng thực hiện một chức năng xác định hoa hồng dựa trên số tiền đã nhập của người dùng. Phải mất một người sử dụng nhập đôi và sử dụng nó để xác định phương trình được sử dụng. Nhưng mã tôi đã viết luôn luôn đi đến tuyên bố khác, và tôi không chắc chắn những gì là sai với điều kiện của tôi.Nếu/người khác nếu luôn đi đến tuyên bố khác

double calculate(double s) 
{ 
    double c; 
    if (s > 300,000) 
    { 
     c = 25,000 + (0.15 * (s-300,000)); 
     cout << "went to if" << endl; 
     return c; 

    } 

    else if (300,000 > s && s > 100,000) 
    { 
     c = 5,000 + (0.10 * (s-100,000)); 
     cout << "went to else if" << endl; 
     return c; 

    } 

    else 
    { 
     c = 0.05 * s; 
     cout << "went to else" << endl; 
     return c; 

    } 
} 
+0

@krzaq How ?? Nghiêm túc? –

+3

@ πάνταῥεῖ cả về lạm dụng toán tử ','. – krzaq

+0

@krzaq Có thể, nhưng không đủ rõ ràng cho một bản dupe. Thôi nào. –

Trả lời

25

s > 300,000 là một biểu dấu phẩy, tương đương với (s > 300),000. Giá trị của biểu thức dấu phẩy là giá trị của giá trị cuối cùng trong danh sách, tại đây 000. Đánh giá là false khi được chuyển đổi thành bool.

Bạn có thể viết rằng khi

if(s > 300'000) 

hoặc, nếu trình biên dịch không hỗ trợ mà ký hiệu mới lạ, như chỉ

if(s > 300000) 

Hoặc bạn có thể xác định

double const k = 1000; 

và viết

if(s > 300*k) 

Và tương tự cho 25 000, 100 000 và 5000 chữ.

+0

Điều đó có hiệu quả, cảm ơn bạn! Tôi nên kiểm tra khi tôi thử nghiệm nó. Lần đầu tiên tôi chạy chương trình, nhập số tiền bằng dấu phẩy vào đó và nhận số tiền không chính xác. Tôi nên đã nhận ra nó sau đó! – gingikid

+1

Ngoài ra, bạn có thể khai báo chuỗi ký tự "k" dưới dạng chữ người dùng định nghĩa để nhân số nguyên cho trước 1000. –

+0

@StackDanny: Vâng, cảm ơn, ý tưởng hay, nhưng tôi nghĩ ở trên là dễ hiểu nhất khi xem mã nguồn (trái ngược với việc viết nó). Có lẽ. Không chắc. –

18

gì được dự định như một số 300,000 trong

if (s > 300,000) 

là, trên thực tế, việc sử dụng tò mò của ,-operator, được phân tách như

if ((s > 300),(000)) 

và kết quả trong false tất cả các thời gian. Thay vào đó, hãy thử

if (s > 300000) 

(Ditto cho else if (300,000 > s && s > 100,000) và trong một vài nơi khác.)

4

300,000 chưa là thích hợp double theo nghĩa đen, nhưng áp dụng toán tử dấu phẩy và kết thúc với giá trị 0.

Sử dụng một . cho literals kép: 300.000 hoặc không có dấu phân cách hàng ngàn: 300000

+2

Nó có thể là một nghìn phân cách có nghĩa là, không phải '.'. – AlexD

+0

@AlexD Tôi đã đề cập đến điều đó? –

+0

Tôi đoán tôi nên đọc nó cho đến khi kết thúc! – AlexD

Các vấn đề liên quan