I am migrating from VB6 which has a FormatNumber function for numbers and another FormatCurrency for money.
I’m in Brazil, where the decimal separator is the comma; (here to represent a thousand and fifty cents we do thus:
Reading the documentation of the Xojo Format function, I’m having some trouble representing integer and decimal values from a PostGres base.
This is my simplified table creation SQL:
create table cars_refuel (
id serial primary key,
fuelam numeric(12,2) default 0 not null,
mileage integer not null
I populated the recordset with a very simple select (for example):
select avg(fuelam) as media from cars
when I try to show media I always got this value : 0.5 (with dot, and I wish (0,50) comma) (with
Then I implement this to try convert:
Format(Data.Field("media").DoubleValue, "#.##0.00") and I receive a value ‘’" (blank)
This code does not work too:
Data.Field("media").CurrencyValue.ToText --> return “0.5”
Could someone help me?
special formatting characters are U.S. characters, the actual characters that will appear are based on the current operating system settings. For example, Windows uses the settings in the user’s Regional and Language Options Control Panel. Formatting characters are specified in similar ways on other operating systems.
I know this
@Tim Parnell ; my Windows is pt-BR; but the result is wrong. (I’m using xojo WEB, maybe tis is a problem)
Your sample code includes the wrong separators though. The
Format function takes the U.S. characters and will output a result that matches the localization of the system it’s being run on.
please note that postgres has a
money field type that is made for this.
then you can use the
currency data type in xojo.
be aware that there is a bug (?) you cannot use
rs.field("fuelam").currencyvalue often gives you a zero
(at least on my french system may be it works on a US system ?)
I made a method
toCurrency that converts a string into a currency data type
and I use
rs.field("fuelam").stringvalue.toCurrency to get my value.
Currency.ToText information doesn’t say that will use the locale settings (even when it is expected), a little test on a system with decimal character (,) instead of (.) and this code:
Dim m As Currency = 0.5
lb1.Text = m.ToText
lb2.Text = Format(m, "#,##0.00")
Will result in:
At least on my computer.
Note: my system usually use . as decimal separator, I changed that on setting for the test.