在C#中将string / int转换为double

时间:2015-11-18 12:42:18

标签: c# int double

这是一个简单的计算器,用于计算将千克价格与您分配给糖果的钱分开时可以获得多少糖果。

例如:“糖果每公斤花费5美元。我为糖果分配了3.50美元。我会用这个程序来计算我得到的糖果量。”

在使用小数之前一切正常。我想将字符串转换为Double,因此我可以使用计算器的小数。 4美元的价格和8美元的金额当然导致2公斤的糖果。但如果公斤价格是4.80美元而且我有9.30美元的钱,我只会得到一个错误并导致命令提示崩溃。

static void Main(string[] args)
    {
      //The variables
        int int1;
        int int2;
        string text1;
        string text2;
      //The actual calculation
        System.Console.Write("Please input the kilogram price of candy: ");
        text1 = System.Console.ReadLine();
        int1 = int.Parse(text1);
        System.Console.Write("Please input the money allocated for candy ");
        text2 = System.Console.ReadLine();
        int2 = int.Parse(text2);
        System.Console.WriteLine("With the amount of money you input you would get " + (int2 / int1) + " kilos of candy.");
    }
}

}

4 个答案:

答案 0 :(得分:4)

您使用的int变量类型只能包含integer numbers,即不包含小数的“整数”,例如142。只要你想使用小数,你就需要一个可以支持它的变量类型。

C#中有一些内置:floatdoubledecimal。鉴于您正在处理货币数据,其中精度和准确性非常重要,您必须使用decimal

您还想使用bool - 返回TryParse(),而不是抛出异常Parse()方法。

因此,请更改您的代码以使用decimaldecimal.TryParse()

decimal pricePerKilogram;
string input = Console.ReadLine();

if (!decimal.TryParse(input, out pricePerKilogram))
{
    // show error or retry
}

答案 1 :(得分:3)

您需要解析来自decimal的输入,而不是int。在这里,尝试这种方式:

System.Console.Write("Please input the kilogram price of candy: ");
decimal pricePerKilo = decimal.Parse(System.Console.ReadLine());
System.Console.Write("Please input the money allocated for candy ");
decimal amountAllocatedForCandy = decimal.Parse(System.Console.ReadLine());
System.Console.WriteLine("With the amount of money you input you would get " + (amountAllocatedForCandy / pricePerKilo) + " kilos of candy.");
System.Console.Read();

int是一种只能存储整数的类型 - 即没有小数部分/十进制数 - 这就是为什么当你试图用十进制数字解析一个带有十进制数字的字符串数时出错的原因{ {1}}。另一方面,int用于存储具有小数分量的数字。

每种类型都有其用途:您永远不会想要使用decimal存储糖果块的数量,因为它只能是整数。这样做可能会导致代码的未来维护者不必要的混淆,并可能导致难以找到的错误。

答案 2 :(得分:1)

因为4.80或9.30不是整数。

<div class="row col s12">
    <div class="hiddenmessage1">You have to select <strong>any one option</strong> so i am here</div>
    <div class="hiddenmessage2">You have selected <strong>red option</strong> so i am here</div>
    <div class="hiddenmessage3">You have selected <strong>green option</strong> so i am here</div>
    <div class="hiddenmessage4">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage5">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage6">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage7">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage8">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage9">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage10">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage11">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage12">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage13">You have selected <strong>blue option</strong> so i am here</div>
    <div class="hiddenmessage14">You have selected <strong>blue option</strong> so i am here</div>
</div>

注意:INT存储整数值,如1 2 3 4等...

答案 3 :(得分:1)

关于你的问题:

首先使用双打 小数

decimal price;
decimal allowance;

另外,还有一些未经请求的建议:

你在这里遇到了一些问题。

首先,您需要在WriteLine语句中交换您的部门以获得正确的计算。

另外,我建议您将变量重命名为更具描述性的内容。

这里的代码经过了一些修改。我已对每项变更发表评论。

//The variables
    decimal price; //CHANGE: descriptive variables!
    decimal allowance;
    string priceInput;
    string allowanceInput;
//The actual calculation
    System.Console.Write("Please input the kilogram price of candy: ");
    priceInput = System.Console.ReadLine();
    price = decimal.Parse(priceInput); //CHANGE: use double.Parse here instead of int.Parse
    System.Console.Write("Please input the money allocated for candy ");
    allowanceInput = System.Console.ReadLine();
    allowance = decimal.Parse(allowanceInput); //CHANGE: use double.Parse here instead of int.Parse
    System.Console.WriteLine("With the amount of money you input you would get "
        + Math.Round(allowance / price, 2) + " kilos of candy.");
    //CHANGE: Divide the money you have by the amount it costs to get the KG of candy.

编辑:由于使用了金钱而增加了小数。