vb.net - VB.NET 十进制。尝试解析点和逗号值
问题描述
我正在尝试在 vb.net 中将字符串解析为十进制,其中可能包含点或逗号,例如。'5000.00', '5000,00' (实际上适用于比利时和尼德兰)。带点的十进制代码:
Decimal.TryParse(amountStr, amountVal)
带逗号的十进制代码:
Decimal.TryParse(amountStr, NumberStyles.AllowDecimalPoint, CultureInfo.CreateSpecificCulture("nl-BE"), amountVal)
是否可以将这些组合成一个代码而不用替换字符串中的逗号?
解决方案
是否可以将这些组合成一个代码而不用替换字符串中的逗号?
字符串替换是这个问题的“常规”解决方案。一个更优雅的替代方法是检查字符串是否包含 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,00
和500,000.00
。)
话虽如此,您也可以使您的代码更复杂以涵盖这些情况,但是您想如何处理,例如,500.000
或者500,000
?是一百万还是五百?
因此,我敦促您重新考虑您的要求。尤其是在解析货币值时,失败并显示有用的错误消息通常比猜测用户的意思更可取。
推荐阅读
- ios - 实现不同的细胞类型
- javascript - 这个css效果是怎么实现的?
- java - FXML 在其他选项卡中显示窗口
- javascript - JavaScript 查找字符串的“最新”版本
- groovy - Groovy:从两个范围创建一个二维数组
- html - height="x%" 不起作用
- api - Apostrophe CMS 中 api 调用的唯一字段类型和特定 GET 参数
- keras - 无效参数“class_mode”和 _make_train_function **self._function_kwargs)
- ruby-on-rails - Rails - 关联三个模型
- wpf - WPF 窗口背景图像中的 URI 路径