我可能有一个简单的问题。
我试图将字符串转换为小数。
我的字符串如下所示: 95,34
我将其转换为小数后 9534D
它丢失了小数位。
为什么呢?我怎么能保留它们?
Dim decbla As String = hfBauvorhaben_Beleihungsauslauf.Value
eBeleihungsauslauf = Convert.ToDecimal(decbla)
我把它写进了一个数据库,后来我需要用小数位回来。
答案 0 :(得分:1)
这可能与文化有关,您可以尝试使用InvariantCulture吗?
变化:
eBeleihungsauslauf = Convert.ToDecimal(decbla)
有关:
eBeleihungsauslauf = Convert.ToDecimal(decbla, CultureInfo.InvariantCulture)
或者:
eBeleihungsauslauf = Decimal.Parse(decbla, CultureInfo.InvariantCulture)
此外,为了测试字符串是否可以转换为有效的小数,您可以使用:Decimal.TryParse
答案 1 :(得分:1)
从字符串中读取十进制数时,文化或区域特征很重要,因为不同的区域使用不同的小数或千位分隔符。因此,在您的情况下,逗号不会被解释为小数分隔符,因此不受尊重。
当前区域性设置在Thread.CurrentCulture属性中的线程上。此属性在请求开始时(对于Web应用程序)或启动应用程序时初始化。您可能需要检查调试器中的值以找出使用的设置。
如果在解析字符串时未指定特定区域性,则使用线程的设置。
根据变量的名称以及字符串的格式,我假设您需要使用德语区域设置来解析字符串。此外,您可以使用Decimal.Parse来指定FormatProvider(您还可以为Convert.ToDecimal指定FormatProvider):
Dim cult As New System.Globalization.Culture("de-DE")
Dim decbla As String = hfBauvorhaben_Beleihungsauslauf.Value
eBeleihungsauslauf = Decimal.Parse(decbla, cult)
如果由于格式没有异常而要处理解析问题,还要查看返回布尔值的Decimal.TryParse方法,该布尔值表示解析是否成功。
您可能希望检查是否可以将应用程序设置为使用正确的区域性设置,而不必在每次需要解析值时指定区域性。这取决于您的应用程序类型(Windows,Web)如何详细执行此操作。它通常涉及在某个时间点将Thread.CurrentCulture(很可能是CurrentUICulture)设置为所需的设置。