我的应用程序从某些对象生成CSV文件。这些CSV文件在许多国家/地区使用,因此我必须使用正确的分隔符。
要在文件中分隔值(单元格),我使用分隔符:
Dim separator As String = My.Computer.Info.InstalledUICulture.TextInfo.ListSeparator
这应该没问题。但是一列包含十进制数字,所以我想确保使用正确的小数分隔符(必须与列表分隔符不同)。
我正在将十进制值转换为这样的字符串:
Dim intValue as Integer = 123456
Dim strValue as String = (intValue / 100).ToString()
在我的国家/地区,列表分隔符是分号,小数点分隔符是逗号。在这种组合中,没关系。但我发现在列表分隔符是逗号的某个国家/地区,小数点分隔符也是逗号。这是一个问题。如果我想使用正确的本地小数分隔符,我如何将十进制数转换为字符串?谢谢!
答案 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