2016-05-15 78 views
0

明天我正在检查我的测试..我在程序中遇到了一个问题(我需要创建一个程序来显示输入数量的细目..我有与仙一个问题...)有关在C中崩溃的程序#

Console.Write("Enter amount: "); 
double amt = double.Parse(Console.ReadLine()); 

thou = (int)amt/1000; 
change = (int)amt % 1000; 

fivehun = (int)change/500; 
change = change % 500; 

twohun = (int)change/200; 
change = change % 200; 

hun = (int)change/100; 
change = change % 100; 

fifty = (int)change/50; 
change = change % 50; 

twenty = change/20; 
change = change % 20; 

ten = (int)change/10; 
change = change % 10; 

five = (int)change/5; 
change = change % 5; 

one = (int)change/1; 
change = change % 1; 

twencents = (int)(change/.25); 
change = change % .25; //there was an error here.. starting here 

tencents = (int)(change/.10); 
change = change % .10; 

fivecents = (int)(change/.05); 
change = change % .05; 

onecent = (int)(change/.01); 
change = change % .01; 

Console.WriteLine("The breakdown is as follows: "); 
Console.WriteLine("Php 1000   ={0} ", thou); 
Console.WriteLine("Php 500   ={0} ", fivehun); 
Console.WriteLine("Php 200   ={0} ", twohun); 
Console.WriteLine("Php 100   ={0} ", hun); 
Console.WriteLine("Php 50   ={0} ", fifty); 
Console.WriteLine("Php 20   ={0} ", twenty); 
Console.WriteLine("Php 10   ={0} ", ten); 
Console.WriteLine("Php 05   ={0} ", five); 
Console.WriteLine("Php 01   ={0} ", one); 
Console.WriteLine("Php 0.25   ={0} ", twencents); 
Console.WriteLine("Php 0.10   ={0} ", tencents); 
Console.WriteLine("Php 0.05   ={0} ", fivecents); 
Console.WriteLine("Php 0.01   ={0} ", onecent);    

Console.ReadKey(); 

错误说我不能转换双为int,所以我试着将它转换我的铸造它

change = (double) change % .25; 

仍然是一个错误..

+0

您是否尝试将'.25'改为'.25f'? –

+0

是仍然不能正常工作.. – Franchette

+0

看起来模数表达式的两边必须是'相同类型'。或者你需要自己重载它。请参阅:https://msdn.microsoft.com/en-US/library/0w4e0fzs(v=VS.100).aspx –

回答

0

EDITED

最初使双变= 0和和分裂AMT到2个变量

double wholeValues = (int)amt; 
double decimalValues = amt - wholeValues; 

输入然后改变

thou = (int)amt/1000; 
change = (int)amt % 1000; 

使其作为

thou = (int)wholeValues/1000; 
change = (int)wholeValues % 1000; 

否则你将在这一点上

舍去小数值,但你缺少一个施放1在

twenty = (int) change/20; 

模块为int将再次给出相同的价值,用新的变量decimalValues开始美分计算

one = (int)change/1; 

change = decimalValues * 100; 

twencents = (int)(change/25); 
change = change % 25; 

tencents = (int)(change/10); 
change = change % 10; 

fivecents = (int)(change/5); 
change = change % 5; 

如果我们使用十进制值模块,你有时可能会与例如不正确的值 结束了。30美分,它将代表0.25美分= 1,0.05美分= 0, 0.01美分= 4

+0

当删除(int)错误时加了.. – Franchette

+0

可以指定其他错误吗? – CloudSL

+0

不能将类型'double'转换为'int'显式转换存在(是否缺少一个转换?)这是错误,但是当我做了你告诉我的时候..另一个错误就像添加到列表 – Franchette

1

使用做uble change = 0;而不是int change = 0;

+0

当我做了更多错误时那.. – Franchette

0

终于明白了!

int thou, fivehun, twohun, hun, fifty, twenty, ten, five, one; 
double change = 0; // added this one as suggested 

Console.Write("Enter amount: "); 
double amt = double.Parse(Console.ReadLine()); 


thou = (int)amt/1000; 
change = amt % 1000; //remove the int (change should be double) 

fivehun = (int)change/500; 
change = change % 500; 

twohun = (int)change/200; 
change = change % 200; 

hun = (int)change/100; 
change = change % 100; 

fifty = (int)change/50; 
change = change % 50; 

twenty = (int) change/20; //added int here 
change = change % 20; 

ten = (int)change/10; 
change = change % 10; 

five = (int)change/5; 
change = change % 5; 

one = (int)change/1; 
change = change % 1; 

int twencents = (int)(change/0.25); 
change = change % 0.25; 

int tencents = (int)(change/0.10); 
change = change % 0.10; 

int fivecents = (int)(change/0.05); 
change = change % 0.05; 

int onecent = (int)(change/0.01); 
change = change % 0.01;