Как преобразовать String в Double?
От: Аноним  
Дата: 04.08.05 08:38
Оценка:
Я делаю так:
theItem.percentage_complete = CDbl(thePercent)

Но возникает Exception:

An unhandled exception of type 'System.InvalidCastException' occurred in microsoft.visualbasic.dll

Additional information: Cast from string "16.666667" to type 'Double' is not valid.

В чем здесь проблема? Что посоветуете?
Re: Как преобразовать String в Double?
От: rus blood Россия  
Дата: 04.08.05 08:48
Оценка:
Здравствуйте, Аноним, Вы писали:


CDbl использует локализацию для определения сепаратора.
У тебя в Regional Settings стоит запятая как разделитель целой и дробной части.
Так что строка невалидная.
Имею скафандр — готов путешествовать!
Re: Как преобразовать String в Double?
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 04.08.05 08:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Additional information: Cast from string "16.666667" to type 'Double' is not valid.


Судя по названию сборки — это VB.NET (лучше это указывать в субже)...
Значит, дело в локали. Вероятно, десятичным разделителем является не точка а запятая.
Либо измени настройки на машине, либо установи другую локаль для треда, либо укажи нужную локаль при преобразовании.

Пример установки заданной локали для треда:
    Dim culture As CultureInfo = New CultureInfo("ru-RU")
    culture.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy"
    culture.DateTimeFormat.ShortTimePattern = "HH:mm"
    culture.NumberFormat.CurrencyDecimalSeparator = ","
    culture.NumberFormat.CurrencyGroupSeparator = " "
    culture.NumberFormat.NumberDecimalSeparator = ","
    culture.NumberFormat.NumberGroupSeparator = " "
    culture.NumberFormat.PercentDecimalSeparator = ","
    culture.NumberFormat.PercentGroupSeparator = " "
    Thread.CurrentThread.CurrentCulture = culture
    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Re[2]: Как преобразовать String в Double?
От: UL Казахстан  
Дата: 16.08.05 01:34
Оценка: -1
Function StrToDouble(ds As String) As Double
ds = Replace(ds, ",", ".")
StrToDouble = CDbl(Val(ds))
End Function
Удачи!
Re[3]: Как преобразовать String в Double?
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 17.08.05 08:29
Оценка:
Здравствуйте, UL, Вы писали:

UL>Function StrToDouble(ds As String) As Double

UL> ds = Replace(ds, ",", ".")
UL> StrToDouble = CDbl(Val(ds))
UL>End Function

...И если у нас локаль такая что "," используется как разделитель тысяч, то на числе "123,456,769.01" мы получим ошибку.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.