在Console.ReadLine中仅接受小数和数字

时间:2015-11-03 02:42:26

标签: c#

我刚刚制定了一个计划来计算一个或多个项目的总成本,给出数量和价格。我关注的一个问题是在物料成本字段中,它根本不接受小数。我也希望两个字段都不接受字母。我见过关于TryParse的一些内容,但我不确定如何使用它以及它是如何工作的。任何帮助表示赞赏。 这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QuantityPrice
{
    class Program
    {
        static void Main(string[] args)
        {
            int Quantity;
            int Cost;
            Console.WriteLine("How much is the item you are buying? (In Canadian Dollars)");
            Cost = int.Parse(Console.ReadLine());
            Console.WriteLine("How many of the item are you buying? (In Canadian Dollars)");
            Quantity = int.Parse(Console.ReadLine());
            var TotalCost = Quantity * Cost * 1.13;
            Console.WriteLine("Your total cost is:");
            Console.WriteLine("$" + TotalCost);
            Console.ReadLine();
            System.Threading.Thread.Sleep(100000);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题是您正在使用int.Parse从用户输入中提取值。 int类型仅适用于整数。如果要处理小数,请使用floatdouble(对于需要浮动小数点的一般数学)或decimal(对于定点算术,如货币)。

作为一般风格评论,请使用"驼峰案例" (以小写字母开头)用于变量名而不是" Pascal case" (以大写字母开头)。

答案 1 :(得分:0)

你需要使用小数而不是int来获取值,只要它不是有效的小数,就像在这个答案Need help with accepting decimals as input in C#中一样。 您可以像这样直接使用:

#include <iostream>
#include <set>

using namespace std;

class PriceLevel
{
public:
    int price;
    int qty;

    PriceLevel() {
        price = 0;
        qty = 0;
    }

    PriceLevel(int _price, int _qty)
    {
        price = _price;
        qty = _qty;
    }

    friend bool operator<(const PriceLevel &p, const PriceLevel &q);

    //Compares two PriceLevel objects and merges their values if their keys are the same.
    //Return value is a std::pair that
    //denotes if the compare was successful and the result is meaningful.        
    static std::pair<bool, PriceLevel> merge_equal(const PriceLevel& p, const PriceLevel& q) {
        std::pair<bool, PriceLevel> result;
        result.first = false;
        if(p.price == q.price) {
            result.first = true;
            result.second.price = p.price;
            result.second.qty = p.qty + q.qty;
        }
        return result;
    }

};

bool operator<(const PriceLevel &p, const PriceLevel &q)
{
    if(p.price < q.price)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    std::set<PriceLevel> s1;
    std::set<PriceLevel> s2;

    PriceLevel p1(100,10);
    PriceLevel p2(200,20);

    PriceLevel p3(100,30);
    PriceLevel p4(200,40);

    s1.insert(p1);
    s1.insert(p2);

    s2.insert(p3);
    s2.insert(p4);

    std::set<PriceLevel> s3;

    //Just in case...the world may explode otherwise.
    if(s1.size() == s2.size()) {

        for(const auto& pl1 : s1) {
            for(const auto& pl2 : s2) {
                //Only insert valid values.
                auto r = PriceLevel::merge_equal(pl1, pl2);
                if(r.first) s3.insert(r.second);
            }
        }

        for(auto it = s3.begin(); it != s3.end(); it++) {
            cout << "Price: " << it->price << endl;
            cout << "Qty : " << it->qty << endl;
        }
    }
}

使用等效函数获取数量的int