Marc Kane Ответов: 2

Как изменить, чтобы .точка


Ребята, извините, что спрашиваю об этом, но даже когда я пишу число как 50,5, оно все равно распознается как 50,5 и записывается таким образом в txt.файл и мой solidworks не могут его распознать. Является ли это следствием "культуры пения" моего местоположения или?, и каков был бы самый быстрый способ изменить это?

Что я уже пробовал:

Dim AA As String
        'Gets a number such is 50,5
        AA = Decimal.Round((CDbl((maxA - minA + 1) * r.NextDouble + minA)), 1, MidpointRounding.AwayFromZero)
        'convert to . instead comma
        AAA = Double.Parse(AA.Replace(",", "."), CultureInfo.InvariantCulture)
        'write down in txt
        Using writer As StreamWriter = New StreamWriter("variablevalues.txt")
            writer.Write(AAA)
        End Using

Даже если я изменю код на только
AAA = Double.Parse("50,5".Replace(",", "."), CultureInfo.InvariantCulture)
Using writer As StreamWriter = New StreamWriter("variablevalues.txt")
writer.Write(AAA)
 End Using
, он все еще пишется с запятой

2 Ответов

Рейтинг:
2

Richard Deeming

Если вы не хотите переопределять параметры культуры для всего приложения, вы можете переопределить параметры культуры для всего приложения. FormatProvider для StreamWriter.

К сожалению, это не так просто, как могло бы быть. Нет никакого способа установить это свойство, если вы используете StreamWriter класс. Но ты мочь создайте свой собственный класс и переопределите это свойство:

Public Class InvariantStreamWriter : Inherits StreamWriter
    Public Sub New(ByVal path As String)
        MyBase.New(path)
    End Sub
    
    Public Sub New(ByVal stream As Stream)
        MyBase.New(stream)
    End Sub
    
    Public Overrides ReadOnly Property FormatProvider As IFormatProvider
        Get
            Return System.Globalization.CultureInfo.InvariantCulture
        End Get
    End Property
End Class
Использование:
Dim AAA As Decimal = Decimal.Round((CDbl((maxA - minA + 1) * r.NextDouble + minA)), 1, MidpointRounding.AwayFromZero)
Using writer As StreamWriter = New InvariantStreamWriter("variablevalues.txt")
    writer.Write(AAA)
End Using


Рейтинг:
1

OriginalGriff

Попробуйте установить текущую культуру:

System.Globalization.CultureInfo default = System.Globalization.CultureInfo.CurrentCulture;
System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("en-GB");
Console.WriteLine(50.5);
System.Globalization.CultureInfo.CurrentCulture = default;
Если вам нужно такое поведение во всем, вы можете просто установить его в верхней части вашего приложения, но это также повлияет на даты и тому подобное.