14
votes

I'm trying to save variables into text files and the Czech typographic rules drives me crazy. The program I'm tuning is dedicated to work on Czech localized computers where decimal comma is used but the VB is working with normal, standard decimal dot.

When loading files "US" decimals are loaded correctly and showed as Czech decimals. In TextBoxes "Czech" decimals are required. My problem is that program generates Czech decimals and require the "US" ones.

How can I force VB program to read comma as decimal sign instead of delimiter or how to export data with dots instead of commas?

Yes I can load 123,456 as a=123 and b=456 and then return value as a + b/1000 but is there more elegant solution?

4
in virtually any programming language you can mention, decimals are represented with a point, not a comma. If your users expect a comma, then convert it for display and input purposes, but you will need to use a point within the code.Spudley
Hopefully you are not trying to use Input#, which is only meant to read data written by Write# which always uses "universal" formats (in this case period as decimal point).Bob77
Spudley: Yes I know, but windows uses three symbols: dot, comma and decimal separator. And two of them looks same. In my case output separator is used from OS - comma - and input separator is programming language native dot.Crowley

4 Answers

13
votes

Pick the right function.

  • Val, Str will always use US settings (dot as decimal)
  • CDbl, Format will take account of the regional settings.

It's all in the manual section on international programming.

7
votes

Your trouble might be due to use of the Val function; that isn't international. The help text recommends the use of CDbl when converting from strings to numbers.

0
votes

Thanks for your advices, I'm not sure if I did something wrong, but I've obtained only errors (ie. type mismatch) or "Czech" decimal comma.

I've tried 'Got slapped? Slap him harder!' aproach with this code:

Dim PpP As String, SaveFile As Integer

PpP = Form1.TxtA10.Text & " " & Form1.TxtA11.Text
PpP = Replace(PpP, ",", ".")
Print #SaveFile, PpP

edit:

something means trying those functions at the output, not at the input. (like trying Double as String parameter).

This code:

Input #1,TempString
Form1.TxtA10.Text = CDbl(TempString)

works aswell.

0
votes

Try,

Format$(CDbl(Text1.Text), "#,##0.00")