CSV文件中的十进制数

时间:2014-06-11 08:00:41

标签: vb.net csv tostring cultureinfo separator

我的应用程序从某些对象生成CSV文件。这些CSV文件在许多国家/地区使用,因此我必须使用正确的分隔符。

要在文件中分隔值(单元格),我使用分隔符:

Dim separator As String = My.Computer.Info.InstalledUICulture.TextInfo.ListSeparator

这应该没问题。但是一列包含十进制数字,所以我想确保使用正确的小数分隔符(必须与列表分隔符不同)。

我正在将十进制值转换为这样的字符串:

Dim intValue as Integer = 123456
Dim strValue as String = (intValue / 100).ToString()

在我的国家/地区,列表分隔符是分号,小数点分隔符是逗号。在这种组合中,没关系。但我发现在列表分隔符是逗号的某个国家/地区,小数点分隔符也是逗号。这是一个问题。如果我想使用正确的本地小数分隔符,我如何将十进制数转换为字符串?谢谢!

1 个答案:

答案 0 :(得分:1)

  

如果我想使用,我如何将十进制数转换为字符串   更正本地小数点分隔符?

默认情况下,无论如何都会使用当前文化的分隔符。但是您可以使用Decimal.ToString的重载CultureInfo

Dim localizedNumber = (intValue / 100).ToString( CultureInfo.CurrentCulture )

如果你想使用不同的文化:

Dim usCulture = new System.Globalization.CultureInfo("en-US")
localizedNumber = (intValue / 100).ToString( usCulture )

如果您想知道给定文化的小数分隔符:

Dim separator As String = usCulture.NumberFormat.NumberDecimalSeparator

编辑因此,您的客户不希望使用制表符作为分隔符,因为他们必须手动指定分隔符。你可以生成一个真正的excel文件,例如使用EPPlus甚至不需要excel-license,或者你需要提供另一个解决方案。

我已经检查过,有13种文化,其中小数分隔符与列表分隔符相同(由excel使用):

Dim conflictCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures).
   Where(Function(c) c.NumberFormat.NumberDecimalSeparator = c.TextInfo.ListSeparator) 

因此,您必须手动检查它,然后提供不同的列表分隔符。如果decimal / list-separator是逗号,则可以使用分号作为列表分隔符,反之亦然:

Dim argentinaCulture = New CultureInfo("es-AR") ' uses same separator for both
Dim decimalSeparator = argentinaCulture.NumberFormat.NumberDecimalSeparator ' comma
Dim listSeparator = argentinaCulture.TextInfo.ListSeparator 'comma
If decimalSeparator = listSeparator Then
    listSeparator = If(listSeparator = ",", ";", ",")
End If