所以我试图传入一个变量money变量,并将其分解为两个变量。当我只传入一个值时,我陷入困境并试图弄清楚如何传回两个值。我应该从用户那里获得双倍的金钱价值并将其分成两个int值。因此,例如,我得到一个像3.45这样的值并将其拆分并打印出消息," 3.45美元和#34;有3美元和45美分。我理解通过引用传递,但我只想弄清楚我说如何获得两个变量。我只能将money变量传递给方法 我知道我的节目不对。只是寻找一些关于如何做到这一点的想法和解释。感谢
using System;
static class Program
{
//Declare any constansts
const int ONE_HUNDRED = 100;
static void Main()
{
//Declare local variables
double money = 0;
//Ask the user to input a money value
Console.WriteLine("Please enter a money value. (ex. 2.95)");
//Store the value in a variable
money = double.Parse(Console.ReadLine());
//Take the variable and call the SplitMoney method
SplitMoney(ref money);
//Display the message
Console.WriteLine("There are {0:d} and {1:d} cents in ${0:f2}", money, dollars cents);
Console.ReadLine();
}//End Main()
//Split Money Method
//Purpose: To split the money into dollars and cents
//Parameters: One double passed by reference
//Returns: Nothing
static void SplitMoney(ref double money)
{
money = (int)(money * ONE_HUNDRED);
int dollars = (int)(money / ONE_HUNDRED);
int cents = (int)(money % ONE_HUNDRED);
}
}//End class Program
答案 0 :(得分:3)
对于你的问题:
public class SplittedMoney
{
public int Dollars { get; set; }
public int Cents { get; set; }
}
你回来了。那将是最简单的方法。
更好的方法可能是:
public struct SplittedMoney
{
public readonly int Dollars;
public readonly int Cents;
public SplittedMoney(int dollars, int cents)
{
Dollars = dollars;
Cents = cents;
}
}
这样更好,因为拆分的美元仍然是一个值,所以使用不可变结构就是这里的方法。
现在,不要在任何需要精确十进制计算的事情中使用double
。使用decimal
代替他们为该任务设计的内容。 double
可能失去精度是基数10,因为它在基数2中存储和操纵。decimal
旨在保持基数10的精度。
这里使用上述结构重写了SplitMoney
:
static SplittedMoney SplitMoney(decimal money)
{
var totalCents = (int)(money * 100);
int dollars = (int)(totalCents / 100);
int cents = (int)(totalCents % 100);
return new SplittedMoney(dollars, cents);
}
答案 1 :(得分:0)
嗯,SplitMoney
当前返回0值。您可以继续变异money
以仅包含美元值,然后实际从方法返回cents
。
static int SplitMoney(ref double money)
{
money = (int)(money * ONE_HUNDRED);
int dollars = (int)(money / ONE_HUNDRED);
int cents = (int)(money % ONE_HUNDRED);
return cents;
}
然后当你使用它时:
var moneyCents = SplitMoney(ref money);
Console.WriteLine("money = {0:f2}.{1:f2}", money, moneyCents);
更好的是,您可以返回包含dollars
和cents
的元组:
static Tuple<int,int> SplitMoney(double money)
{
var totalCents = (int)(money * ONE_HUNDRED);
int dollars = (int)(money / ONE_HUNDRED);
int cents = (int)(money % ONE_HUNDRED);
return Tuple.Create(dollars,cents);
}
将用作
var splitMoney = SplitMoney(money);
Console.WriteLine("money = {0:f2}.{1:f2} from {2:d}",
splitMoney.Item1, splitMoney.Item2, money);