User Tools

Site Tools


k9:k9.10:start

9.10 Conversion functions

In many programs, conversions between different data types are necessary if, for example, values from a TextBox are to be processed as numbers or as dates according to the type. For all conversion functions, note the data type of the arguments and the data type of the function value as well as the notes on localization.

9.10.1 Table of selected conversion functions

FunctionDescription
CBool(Expr) AS BooleanConverts an expression to a true or false value. An expression is guaranteed to be incorrect if a true value is wrong or a number is 0 or the string length is 0 or a NULL date exists or a zero object.
CByte(Expr AS Variant) AS ByteConverts an expression into a byte. The expression is first converted to an integer value. If the integer value exceeds the byte range[0… 255] then it is transformed (modulo 256) into this range.
CDate(Expr AS Variant) AS DateConverts an expression (number of data type integer or float) into a date/time string. CDate does not use the current localization!
CFloat(expr AS Variant) AS Float
CFlt(Expr AS Variant) AS FloatConverts an expression to a floating point number. Careful! This function does not use the selected localization. A dot must be set as a decimal separator!
CInt(Expr AS Variant) AS Integer
CInteger(Expr AS Variant) AS IntegerConverts an expression into a number of the data type integer.
CLong(Expr AS Variant) AS LongConverts an expression to a number of the data type Long. An overrange is not detected.
CShort (Expr AS Variant) AS ShortConverts an expression into a number of the data type Short. The expression is first converted to an integer value. If the integer value exceeds the short range[-32.768… 32.767], then it is transformed into this range. The least significant 16 bits are extracted from Expr and interpreted as an integer in the sense of the two's complement.
CSingle(Expr AS Variant) AS SingleConverts an expression into a number of the data type Single. This function does not use the set localization!
CStr(Expr AS Variant) AS String
CString(Expr AS Variant) AS StringConverts an expression into a string. This function does not use the set localization!
CVar(expr) AS Variant
CVariant(Expr) AS VariantConverts an expression to a variant. This is useful if the result of a function depends on the data type of the arguments.
Str$(expr) AS String
Str(Expr) AS StringConverts a number or date into a string. This function observes the localization settings!
DConv$(string AS string) AS String
DConv(string AS string) AS StringConverts a string from the system character set to UTF-8, the desktop character set.
SConv$(string AS string)
SConv(string AS string)Converts a string from the desktop character set (which should be UTF-8) to the system character set.
Val(string)Converts a string into a number or date. This function takes into account the selected localization!

Table 9.10.1.1: Overview of the conversion functions

The conversion algorithm for the Val () function is the following:

  • If the string can be interpreted as date and time (with a date or time separator corresponding to the localization), the date or time is returned.
  • If the string is interpreted as a floating point number, the number is returned.
  • If the string can be interpreted as a 64-bit number, then this number of the data type Long is returned. Otherwise, if the string can be interpreted as an integer, this integer is returned.
  • If String = “True” or String = “False”, the matching truth values “True” or “False” are returned.
  • In all other cases NULL is returned.

9.10.2 Conversion functions for character sets

ConvertedString = Conv$(string AS string, source character set AS string, target character set AS string) 
ConvertedString = Conv(string AS string, source character set AS string, target character set AS string) 

Converts a string from one character set to another. A character set is represented by a string such as ASCII, ISO-8859-1, or UTF-8.

  • The Gambas interpreter uses the UTF-8 character set internally.
  • The character set used by the system is returned in the' System. Charset' property.
  • In the future probably all Linux systems will be based on UTF-8.
  • The character set used by the graphical user interface is provided by Desktop. charset. This should be UTF-8.

9.10.3 Examples

Dim sNumber As Single

Print CBool(0), CBool(1), CBool("Gambas"), CBool(""), CBool(Null), CBool(Date(2000, 2, 29))  
  
Print CByte("23"), CByte("257"), CByte(True)  
  
Print "CDate(2488913) = "; CDate(2488913)   
Print "UnixTimeStamp  = "; DateDiff(CDate("1/1/1970"), Now, gb.Second)  
Try CDate("12.2. 2014 12:45:00")
If Error.Code = 6 Then Print "Der Ausdruck '"; "12.2. 2014 12:45:00"; "' kann nicht konvertiert werden!"  
Print "Datum: ", Format(CDate(Val("1.9.2012")), "d. mmmm yyyy")  
Print "Tage seit 1.1. 1970 = "; DateDiff(CDate("1/1/1970"), Now, gb.Day) ' 16224 

Print CFloat("+3.1416"), CFloat(Now())  
  
Print CInt("17"), CInt(True), CInt(Pi(1 / 7)), CInt(3.8), CInt(-7.998), CInt(-7.1), CInt(Now)

Print "CLong(5 ^ (2 ^ 2)) = "; CLong(5 ^ (2 ^ 2))
Print "CLong(2^62) = "; CLong(2 ^ 62)

Print CShort(20 < 6), CShort(False), CShort(True), CShort(DateDiff(CDate("1/1/1970"), Now, gb.Day))

Try sNumber = CSingle(DateDiff(CDate("1/1/1970"), Now(), gb.Millisecond))
If Error Then Print "ÜBERLAUF"
Print CSingle(Pi), CFloat(Pi), CSingle(Exp(11)), CSingle("+355.11")  

Print CStr(-99), CStr(Pi(Pi())), CStr(355 / 113), CStr(Now)

Print "Object.Type(CVariant([2, 3, 5])) = "; Object.Type(CVariant([2, 3, 5]))
Print "Object.Type(CVariant([\"2\",\"3\",\"5\"])) = "; Object.Type(CVariant(["2", "3", "5"]))
Print "Object.Type([CVariant(\"a\"),\"b\",\"c\"]) = "; Object.Type([CVariant("a"), "b", "c"])

Print "Val(\"True\") = "; Val("True"), "Val(\"False\") = "; Val("False")
Print Format(Val("12.11.2013"), "d. mmmm yyyy")
Print "Val(\"123,456\") = "; Val("123,456"); " (Number with comma as decimal separator for DE.de)"
Print "Val(\"123.456\") = "; Val("123.456"); " (Point is interpreted as a thousands separator!)"
If Val("123.66") = Null Then Print "Val(\"123.66\") = NULL"; " (String cannot be interpreted as a number.)"

Print Conv("Ärger in der Ödipus-Straße", System.Charset, "ISO 8859-15")
Print "Desktop-Zeichensatz = "; Desktop.Charset
Print "System-Zeichensatz  = "; System.Charset
False   True    True    False   False   True
23      1       255
CDate(2488913) = 30.05.2014 23:00:00
UnixTimeStamp  = 1401992840
The expression' 12.2.2014 12:45:00' cannot be converted!
Datum:  1. September 2012
Tage seit 1.1. 1970 = 16226
3,1416  2488918,81065353
17      -1      0       3       -7      -7      2488918
CLong(5 ^ (2 ^ 2)) = 625
CLong(2^62) = 4611686018427387904
0       0       -1      16226
Overflow
3,1415927       3,14159265358979        59874,140625    355,1099854
-99     9.86960440108936        3.14159292035398        06/05/2014 18:27:20.466
Object.Type(CVariant([2, 3, 5]))     = Integer[]
Object.Type(CVariant(["2","3","5"])) = String[]
Object.Type([CVariant("a"),"b","c"]) = Variant[]
Val("True") = True      Val("False") = False
12. November 2013
Val("123,456") = 123,456 (Number with comma as decimal separator for DE.de)
Val("123.456") = 123456 (Point is interpreted as a thousands separator!)
Val("123.66") = NULL (String cannot be interpreted as a number.)
�rger in der �dipus-Stra�e
Desktop-Zeichensatz = UTF-8
System-Zeichensatz  = UTF-8

Download

9.10 Konvertierungsfunktionen

In vielen Programmen werden Konvertierungen zwischen verschiedenen Daten-Typen notwendig, wenn zum Beispiel Werte aus einer TextBox als Zahlen oder als Datum typ-gerecht weiter verarbeitet werden sollen. Beachten Sie bei allen Konvertierungsfunktionen den Daten-Typ der Argumente und den Daten-Typ des Funktionswertes sowie die Hinweise zur Lokalisierung.

9.10.1 Tabelle ausgewählter Konvertierungsfunktionen

FunktionBeschreibung
CBool ( Expr ) AS BooleanKonvertiert einen Ausdruck in einen Wahrheitswert (True oder False). Ein Ausdruck ist garantiert falsch, wenn ein Wahrheitswert Falsch ist oder eine Zahl 0 ist oder die String-Länge 0 ist oder ein NULL-Datum vorliegt oder ein Null-Objekt.
CByte ( Expr AS Variant ) AS ByteKonvertiert einen Ausdruck in ein Byte. Der Ausdruck wird zuerst in einen Integer-Wert konvertiert. Überschreitet der Integer-Wert den Byte-Bereich [0..255] , dann wird er (modulo 256) in diesen Bereich transformiert.
CDate ( Expr AS Variant ) AS DateKonvertiert einen Ausdruck (Zahl vom Daten-Typ Integer oder Float) in einen Datum/Zeit-String. CDate nutzt die aktuelle Lokalisierung nicht!
CFloat ( Expr AS Variant ) AS Float
CFlt ( Expr AS Variant ) AS FloatKonvertiert einen Ausdruck in eine Fließkommazahl. Vorsicht! Diese Funktion nutzt die eingestellte Lokalisierung nicht. Es muss als Dezimal-Separator ein Punkt gesetzt werden!
CInt ( Expr AS Variant ) AS Integer
CInteger ( Expr AS Variant ) AS IntegerKonvertiert einen Ausdruck in eine Zahl vom Daten-Typ Integer.
CLong ( Expr AS Variant ) AS LongKonvertiert einen Ausdruck in eine Zahl vom Daten-Typ Long. Eine Bereichsüberschreitung wird nicht erkannt.
CShort ( Expr AS Variant ) AS ShortKonvertiert einen Ausdruck in eine Zahl vom Daten-Typ Short. Der Ausdruck wird zuerst in einen Integer-Wert konvertiert. Überschreitet der Integer-Wert den Short-Bereich [-32.768 .. +32.767], dann wird er in diesen Bereich transformiert. Dabei werden die geringst-signifikanten 16 Bits aus Expr extrahiert und im Sinne des Zweierkomplements als Ganzzahl interpretiert.
CSingle ( Expr AS Variant ) AS SingleKonvertiert einen Ausdruck in eine Zahl vom Daten-Typ Single. Diese Funktion nutzt die eingestellte Lokalisierung nicht!
CStr ( Expr AS Variant ) AS String
CString ( Expr AS Variant ) AS StringKonvertiert einen Ausdruck in einen String. Diese Funktion nutzt die eingestellte Lokalisierung nicht!
CVar ( Expr ) AS Variant
CVariant ( Expr ) AS VariantKonvertiert einen Ausdruck in einen Variant. Dies ist nützlich, wenn das Ergebnis einer Funktion vom Datentyp der Argumente abhängig ist.
Str$ ( Expr ) AS String
Str ( Expr ) AS StringKonvertiert eine Zahl oder ein Datum in einen String. Diese Funktion beachtet die eingestellte Lokalisierung!
DConv$ ( String AS String ) AS String
DConv ( String AS String ) AS StringKonvertiert einen String vom System-Zeichensatz nach UTF-8, den Desktop-Zeichensatz.
SConv$ ( String AS String )
SConv ( String AS String ) Konvertiert einen String vom Desktop-Zeichensatz (der UTF-8 sein sollte) in den System-Zeichensatz.
Val ( String )Konvertiert einen String in eine Zahl oder in ein Datum. Diese Funktion berücksichtigt die eingestellte Lokalisierung!

Tabelle 9.10.1.1: Übersicht zu den Konvertierungsfunktionen

Der Umwandlungsalgorithmus für die Val()-Funktion ist der folgende:

  • Wenn der String als Datum und Uhrzeit (mit Datums- oder Zeit-Trennzeichen entsprechend der Lokalisierung) interpretiert werden kann, wird das Datum oder die Zeit zurückgegeben.
  • Wenn der String als Fließkommazahl interpretiert werden, dann wird die Zahl zurückgegeben.
  • Wenn der String als 64-Bit-Zahl interpretiert werden kann, dann wird diese Zahl vom Daten-Typ Long zurückgegeben. Ansonsten wird – wenn die Zeichenfolge als ganze Zahl interpretiert werden kann – diese ganze Zahl zurückgegeben.
  • Wenn String = “True” oder String = “False” ist, so werden die passenden Wahrheitswerte “True” oder “False” zurückgegeben.
  • In allen anderen Fällen wird NULL zurückgegeben.

9.10.2 Konvertierungsfunktionen für Zeichensätze

UmgewandelterString = Conv$ ( String AS String , QuellZeichensatz AS String , ZielZeichensatz AS String ) 
UmgewandelterString = Conv  ( String AS String , QuellZeichensatz AS String , ZielZeichensatz AS String ) 

Wandelt einen String von einem Zeichensatz in einen anderen um. Ein Zeichensatz wird durch einen String wie “ASCII”, “ISO-8859-1”, oder “UTF-8” repräsentiert.

  • Der Gambas-Interpreter benutzt intern den UTF-8-Zeichensatz.
  • Der vom System benutzte Zeichensatz wird in der Eigenschaft 'System.Charset' zurückgegeben.
  • Zukünftig werden vermutlich alle Linux-Systeme auf UTF-8 basieren.
  • Den Zeichensatz, der vom grafischen Benutzerinterface verwendet wird, liefert Desktop.Charset. Dieser sollte UTF-8 sein.
  • Die Umwandlung beruht intern auf der iconv()-GNU-Library-Funktion.

9.10.3 Beispiele

Dim sNumber As Single

Print CBool(0), CBool(1), CBool("Gambas"), CBool(""), CBool(Null), CBool(Date(2000, 2, 29))  
  
Print CByte("23"), CByte("257"), CByte(True)  
  
Print "CDate(2488913) = "; CDate(2488913)   
Print "UnixTimeStamp  = "; DateDiff(CDate("1/1/1970"), Now, gb.Second)  
Try CDate("12.2. 2014 12:45:00")
If Error.Code = 6 Then Print "Der Ausdruck '"; "12.2. 2014 12:45:00"; "' kann nicht konvertiert werden!"  
Print "Datum: ", Format(CDate(Val("1.9.2012")), "d. mmmm yyyy")  
Print "Tage seit 1.1. 1970 = "; DateDiff(CDate("1/1/1970"), Now, gb.Day) ' 16224 

Print CFloat("+3.1416"), CFloat(Now())  
  
Print CInt("17"), CInt(True), CInt(Pi(1 / 7)), CInt(3.8), CInt(-7.998), CInt(-7.1), CInt(Now)

Print "CLong(5 ^ (2 ^ 2)) = "; CLong(5 ^ (2 ^ 2))
Print "CLong(2^62) = "; CLong(2 ^ 62)

Print CShort(20 < 6), CShort(False), CShort(True), CShort(DateDiff(CDate("1/1/1970"), Now, gb.Day))

Try sNumber = CSingle(DateDiff(CDate("1/1/1970"), Now(), gb.Millisecond))
If Error Then Print "ÜBERLAUF"
Print CSingle(Pi), CFloat(Pi), CSingle(Exp(11)), CSingle("+355.11")  

Print CStr(-99), CStr(Pi(Pi())), CStr(355 / 113), CStr(Now)

Print "Object.Type(CVariant([2, 3, 5])) = "; Object.Type(CVariant([2, 3, 5]))
Print "Object.Type(CVariant([\"2\",\"3\",\"5\"])) = "; Object.Type(CVariant(["2", "3", "5"]))
Print "Object.Type([CVariant(\"a\"),\"b\",\"c\"]) = "; Object.Type([CVariant("a"), "b", "c"])

Print "Val(\"True\") = "; Val("True"), "Val(\"False\") = "; Val("False")
Print Format(Val("12.11.2013"), "d. mmmm yyyy")
Print "Val(\"123,456\") = "; Val("123,456"); " (Zahl mit Komma als Dezimal-Trennzeichen für DE.de)"
Print "Val(\"123.456\") = "; Val("123.456"); " (Punkt wird als Tausender-Trennzeichen interpretiert!)"
If Val("123.66") = Null Then Print "Val(\"123.66\") = NULL"; " (String nicht als Zahl interpretierbar.)"

Print Conv("Ärger in der Ödipus-Straße", System.Charset, "ISO 8859-15")
Print "Desktop-Zeichensatz = "; Desktop.Charset
Print "System-Zeichensatz  = "; System.Charset
False   True    True    False   False   True
23      1       255
CDate(2488913) = 30.05.2014 23:00:00
UnixTimeStamp  = 1401992840
Der Ausdruck '12.2. 2014 12:45:00' kann nicht konvertiert werden!
Datum:  1. September 2012
Tage seit 1.1. 1970 = 16226
3,1416  2488918,81065353
17      -1      0       3       -7      -7      2488918
CLong(5 ^ (2 ^ 2)) = 625
CLong(2^62) = 4611686018427387904
0       0       -1      16226
ÜBERLAUF
3,1415927       3,14159265358979        59874,140625    355,1099854
-99     9.86960440108936        3.14159292035398        06/05/2014 18:27:20.466
Object.Type(CVariant([2, 3, 5]))     = Integer[]
Object.Type(CVariant(["2","3","5"])) = String[]
Object.Type([CVariant("a"),"b","c"]) = Variant[]
Val("True") = True      Val("False") = False
12. November 2013
Val("123,456") = 123,456 (Zahl mit Komma als Dezimal-Trennzeichen für DE.de)
Val("123.456") = 123456 (Punkt wird als Tausender-Trennzeichen interpretiert!)
Val("123.66") = NULL (String nicht als Zahl interpretierbar.)
�rger in der �dipus-Stra�e
Desktop-Zeichensatz = UTF-8
System-Zeichensatz  = UTF-8

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k9/k9.10/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools