Hledal jsem na netu řešení obdobného problému a narazil jsem na tuto diskuzi, ale potřeboval jsem to řešit trochu obecněji. Takže možná někomu pomůže tento příspěvek. Funkce Cdbl při konverzi ze stringu reflektuje místní nastavení systému a tedy za oddělovač desetinného místa považuje v českém (německém,...) prostření čárku, v anglickém (,...) tečku, v řeckém apostrof. Jaký je v místním nastavení použit oddělovač lze pomocí System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator. Kdesi na netu jsem narazil na příklad, kde hodnotu této property nastavují, mě VB.NET tvrdí, že je ReadOnly (Možná je to tím, že to zkouším ve VS2003 a navíc v compact frameworku). Pakliže tedy není možné oddělovač nastavit, nezbývá, než se s tím smířit a podle toho se zařídit. V rámci jedné aplikace mi to stačí a podle aktuálního nastavení se zařídím. Pokud ovšem mám aplikaci, které (např.) přijdou data po Tcp protokolu a já dopředu nevím, s jakým desetinným oddělovačem, vytvořím si funkci, která v příchozím stringu nahradí tečky a čárky (případně další znaky, pokud budu chtít počítat s oddělovači jinými (například řeckým apostrofem:-)). A až pak string převede na Double.
dim DesetinaTeckaCarkaZMistnihoNastaveni as String = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
Private Function CdblKaslatNaSeparator(ByVal vstup As String) As Double
Return CDbl(vstup.Replace(",", DesetinaTeckaCarkaZMistnihoNastaveni).Replace(".", DesetinaTeckaCarkaZMistnihoNastaveni))
End Function
A pak budu všude požívat místo Cdbl funkci CdblKaslatNaSeparator
|