2017-01-07 2 views
1

Ich muss eine Konsolenanwendung erstellen, wie in der Abbildung unten gezeigt. Console ApplicationWie Währungssymbole in Eingabezeichenfolge zulassen C#

Das Problem ist, dass, wenn ich den Stundensatz mit dem $ eingeben, ein System.FormatException Fehler auftritt. Es besagt auch, dass die Eingabezeichenfolge nicht im richtigen Format war. Hier

ist der Code-Schnipsel, die das Problem verursacht

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

Und hier ist das ganze Programm

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

Weil Sie das nicht-numerische Währungszeichen nicht verdoppeln können. – Jasen

Antwort

0

Sie die Syntax verwenden können @"..." eine Stringliteral in C# zu bezeichnen, oder Sie kann reservierte Formatierungszeichen mit dem Zeichen \ umgehen.

Zum Beispiel:

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

Sie könnten verwenden, um die Double.TryParse Überlastungen das Währungssymbol zu ermöglichen und die Nummer.

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

Schöne Antwort. Ab C# v7 können Sie die hässliche out-Parameter-Syntax loswerden. Es ist nicht nötig, die Variable 'd' separat zu deklarieren. Sie können den gleichen Code schreiben wie 'if (double.TryParse (" $ 20.00 ", NumberStyles.Number | NumberStyles.AllowCurrencySymbol, CultureInfo.CurrentCulture, out var d)) { Console.WriteLine (d); } ' – RBT

+0

Danke @RBT für die Erklärung. –

1

Sie könnten nur die Eingabezeile ändern:

Console.Write("Enter the hourly rate: $"); 

die Zeile:

double.Parse(...) 

wird Währung

zum Parsen in diesem Link zur vorherigen Frage erklärt

Convert any currency string to double

Verwandte Themen