14

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?

Crowley
  • 2,279
  • 6
  • 22
  • 36
  • 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 Jun 02 '11 at 13:45
  • 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 Jun 02 '11 at 14:32
  • 1
    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 Jun 02 '11 at 17:53

4 Answers4

13

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.

MarkJ
  • 30,070
  • 5
  • 68
  • 111
7

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.

Brian Hooper
  • 21,544
  • 24
  • 88
  • 139
  • Beware that `CDbl()` uses the **System Separator** (and not the actual decimal separator used by Excel). If you need to obtain the currently used System separator, you can use an approach provided by [Erik A](https://stackoverflow.com/a/53205733/11875147) - i.e. use `Format(0, ".")` – Jakub Holan Mar 17 '22 at 18:18
0

Try,

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

Waruna Manjula
  • 3,067
  • 1
  • 34
  • 33
0

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.

Crowley
  • 2,279
  • 6
  • 22
  • 36
  • First convert the Czech string to a number using `Dim f As Single: f = CDbl(Form1.TxtA10.Text)` then convert the number to a string with US formatting via `PpP = Str(f)` – MarkJ Jun 03 '11 at 08:38