【问题标题】:How to allow currency symbols in input string C# [duplicate]如何在输入字符串C#中允许货币符号[重复]
【发布时间】:2017-01-07 02:57:32
【问题描述】:

我需要创建一个控制台应用程序,如下图所示。Console Application

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

这是导致问题的代码的sn-p

        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();





        }
    }
}

【问题讨论】:

  • 因为无法解析非数字货币字符加倍。

标签: c# readline


【解决方案1】:

您可以使用 double.TryParse 重载来允许货币符号并获取数字。

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

【讨论】:

  • 不错的答案。从 C# v7 开始,您将能够摆脱丑陋的 out 参数语法。无需单独声明d 变量。你可以写和if(double.TryParse("$20.00", NumberStyles.Number | NumberStyles.AllowCurrencySymbol, CultureInfo.CurrentCulture, out var d)) { Console.WriteLine(d); }一样的代码
  • 感谢@RBT 的解释。
【解决方案2】:

你可以改变输入行:

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

行:

double.Parse(...)

在此链接中解释了解析货币的上一个问题

Convert any currency string to double

【讨论】:

    【解决方案3】:

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2022-09-23
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多