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,00
和 500,000.00
的值,则此“简单”解决方案将失败。)
话虽如此,您 可以 让您的代码更复杂以涵盖这些情况,但是您想要如何处理,例如 500.000
或 500,000
?是五十万还是五百?
因此,我敦促您重新考虑您的要求。尤其是在解析货币值时,失败 和有用的错误消息通常比 猜测 用户可能的意思更可取。
我正在尝试将 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,00
和 500,000.00
的值,则此“简单”解决方案将失败。)
话虽如此,您 可以 让您的代码更复杂以涵盖这些情况,但是您想要如何处理,例如 500.000
或 500,000
?是五十万还是五百?
因此,我敦促您重新考虑您的要求。尤其是在解析货币值时,失败 和有用的错误消息通常比 猜测 用户可能的意思更可取。