VB.NET Decimal.Try 解析点和逗号值

VB.NET Decimal.Try parse for dot and comma values

我正在尝试将 vb.net 中的字符串解析为十进制,其中可能包含点或逗号,例如。 '5000.00', '5000,00'(实际上是比利时和尼德兰)。 带点的十进制代码:

Decimal.TryParse(amountStr, amountVal)

带逗号的十进制代码:

Decimal.TryParse(amountStr, NumberStyles.AllowDecimalPoint, CultureInfo.CreateSpecificCulture("nl-BE"), amountVal)

是否可以将这些组合成一个代码而不用替换字符串中的逗号?

Is it possible to combine these into one code without replacing comma in string?

字符串替换是解决此问题的“常规”方法。一个稍微更优雅的替代方法是检查字符串是否包含 .,,然后将“正确”的 CultureInfo 提供给 TryParse:

Dim isBelgianFormat As Boolean = amountStr.Contains(",")

Dim ci As CultureInfo = If(isBelgianFormat,
                           CultureInfo.GetCultureInfo("nl-BE"),
                           CultureInfo.InvariantCulture)

...Decimal.TryParse(amountStr, NumberStyles.AllowDecimalPoint, ci, amountVal)...

这还允许您通过用更复杂的算法替换第一行来“微调”您的猜测逻辑。 (例如,如果您的用户使用千位分隔符,即如果您想正确“猜测”500.000,00500,000.00 的值,则此“简单”解决方案将失败。)

话虽如此,您 可以 让您的代码更复杂以涵盖这些情况,但是您想要如何处理,例如 500.000500,000?是五十万还是五百?

因此,我敦促您重新考虑您的要求。尤其是在解析货币值时,失败 和有用的错误消息通常比 猜测 用户可能的意思更可取。