首页 > 解决方案 > VB.NET 十进制。尝试解析点和逗号值

问题描述

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

Decimal.TryParse(amountStr, amountVal)

带逗号的十进制代码:

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

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

标签: vb.net

解决方案


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

字符串替换是这个问题的“常规”解决方案。一个更优雅的替代方法是检查字符串是否包含 a.或 a ,,然后将“正确的”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.000或者500,000?是一百万还是五百?

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


推荐阅读