所以我想把字符串中的所有数字相加,但总和好像12.3是123.

string[] values = { "12.3", "45", "ABC", "11", "DEF" };

decimal total = 0m;
string letters = "";

for (int i = 0; i < values.Length; i++)
{
    string value = values[i];
    decimal number;

    if (decimal.TryParse(value, out number))
    { 
        total += number; 
    }
    else 
    { 
        letters += value; 
    }

}
Console.WriteLine($"Message: {letters}\nTotal: {total}");

输出

Message: ABCDEF
Total: 179

我试着把12.3改为12,3来修改这个字符串,结果成功了,但我还是不明白为什么?

推荐答案

这听起来像是文化冲突——意思是"逗号是组分隔符还是小数点分隔符"(句号也是一样)

默认情况下,decimal.Parse etc将使用环境当前区域性;如果您想使用specific区域性(可能是"不变"区域性)—do that:

if (decimal.TryParse(value, CultureInfo.InvariantCulture, out number))

您还可以使用specific区域性:

var culture = CultureInfo.GetCultureInfoByIetfLanguageTag("it");
if (decimal.TryParse(value, culture, out number))

Csharp相关问答推荐

Microsoft.AspNetCore.Mvc. Controller Base.用户:属性或索引器Controller Base.用户无法分配给--它是只读的

无法从具有一对多关系的C#类中使用Swagger创建记录

为什么我的ASP.NET核心MVC应用程序要为HTML元素添加一些标识符?

如何使用XmlSerializer反序列化字符串数组?

.NET 8 Web-API返回空列表

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

UWP应用程序try 将打包的本机.exe文件加载为C#程序集

为基本审计设置Audit.EntityFramework.Core

在C#中,将两个哈希集连接在一起的时间复杂度是多少?

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

依赖项注入、工厂方法和处置困境

升级后发出SWITCH语句

我什么时候应该在Dapper中使用Connection.OpenAsync?

如何在.NET MAUI中最大化GraphicsView的大小?

为什么我的用户界面对象移动到略低于实际目标?

Blazor:搜索框在第一次搜索时不搜索

工厂类是如何在.NET 8中注册的?

无效的Zip文件-Zip存档

如何提高C#中比较大 struct 的性能?