我刚刚制定了一个计划来计算一个或多个项目的总成本,给出数量和价格。我关注的一个问题是在物料成本字段中,它根本不接受小数。我也希望两个字段都不接受字母。我见过关于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);
}
}
}
答案 0 :(得分:1)
问题是您正在使用int.Parse
从用户输入中提取值。 int
类型仅适用于整数。如果要处理小数,请使用float
或double
(对于需要浮动小数点的一般数学)或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