2017-01-07 70 views
1

我需要创建一个控制台应用程序,如下图所示。 Console Application如何在输入字符串C中允许货币符号#

问题是,当我用$输入小时费率时,发生System.FormatException错误。它也说输入字符串格式不正确。

这里的代码片段引起该问题

 double rate = 0; 
     Console.Write("Enter the hourly rate: "); 
     rate = double.Parse(Console.ReadLine()); 

这里是整个程序

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

namespace ICA2_Mason_Clarke 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      int hoursWorked = 0; 
      Console.Write("Enter the hours worked: "); 
      hoursWorked = int.Parse(Console.ReadLine()); 
      double rate = 0; 
      Console.Write("Enter the hourly rate: "); 
      rate = double.Parse(Console.ReadLine()); 
      int taxRate = 0; 
      Console.Write("Enter the tax rate as a percent: "); 
      taxRate = int.Parse(Console.ReadLine()); 
      double grossPay = rate * hoursWorked; 
      Console.Write("Gross pay : $"); 
      Console.WriteLine(grossPay); 
      double taxesDue = grossPay * taxRate/100; 
      Console.Write("Taxes due : $"); 
      Console.WriteLine(taxesDue); 
      double netPay = grossPay - taxesDue; 
      Console.Write("Net pay : $"); 
      Console.WriteLine(netPay); 
      Console.Write("Press any key to continue"); 
      Console.Read(); 





     } 
    } 
} 
+0

因为你无法解析非数字货币字符来加倍。 – Jasen

回答

0

您可以使用语法@"..."表示在C#中的字符串文字,或者你可以使用char \转义保留的格式化字符。

例如:

Console.Write(@"Gross pay : $"); 
3

您可以使用double.TryParse过载,使货币符号,并获得数。

double d; 
double.TryParse("$20.00", NumberStyles.Number | NumberStyles.AllowCurrencySymbol, CultureInfo.CurrentCulture, out d); 
Console.WriteLine(d); 
+0

很好的答案。从C#v7开始,您将能够摆脱丑陋的参数语法。不需要单独声明'd'变量。您可以编写相同的代码,如:if(double.TryParse(“$ 20.00”,NumberStyles.Number | NumberStyles.AllowCurrencySymbol,CultureInfo.CurrentCulture,out var d)) Console.WriteLine(d); }' – RBT

+0

感谢@RBT的解释。 –