这里是我为自己想出的一个解决方案。这可以作为命令提示符项目直接运行。如果有必要,您需要清理一些内容。希望这能帮到您。它可以接受多种输入格式,例如:1.234.567,89 1,234,567.89 等等。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Linq;
namespace ConvertStringDecimal
{
class Program
{
static void Main(string[] args)
{
while(true)
{
string input = Console.ReadLine();
double result = 0;
input = input.Replace(" ", "");
if (string.IsNullOrEmpty(input) == false)
{
if (input.Contains(",") && input.Contains("."))
{
int decimalpos = input.LastIndexOf(',') > input.LastIndexOf('.') ? input.LastIndexOf(',') : input.LastIndexOf('.');
input = input.Substring(0, decimalpos) + "|" + input.Substring(decimalpos + 1);
input = input.Replace(".", "").Replace(",", "").Replace("|", ".");
}
if (input.Contains(","))
{
input = input.Replace(',', '.');
}
if(input.Count(item => item == '.') > 1)
{
input = input.Replace(".", "");
}
if (double.TryParse(input, out result) == true)
{
result = Double.Parse(input, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
}
}
Console.WriteLine(result.ToString());
Console.WriteLine("----------------");
}
}
}
}
decimal
会保持适当的精度。decimal.Parse("1200.000")
和decimal.Parse("1200.00")
将返回不同的值,保留末尾0的数量。 - Jon Skeet