小数保持小数位

时间:2014-03-13 08:35:37

标签: vb.net decimal

我可能有一个简单的问题。

我试图将字符串转换为小数。

我的字符串如下所示: 95,34

我将其转换为小数后 9534D

它丢失了小数位。

为什么呢?我怎么能保留它们?

            Dim decbla As String = hfBauvorhaben_Beleihungsauslauf.Value
            eBeleihungsauslauf = Convert.ToDecimal(decbla)

我把它写进了一个数据库,后来我需要用小数位回来。

2 个答案:

答案 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)设置为所需的设置。