Problemas CDbl

Buenos dias, tengo el siguiente problema, estoy haciendo calculos de precios y trabajo con 2 decimales, pero cuando paso con cdbl para poder realizar la operacion, me altera el nro agregando digitos decimales y termina dandome un resto que no es correcto. Trabajo con “,” coma ya que es la configuracion regional para decimales.
Ej: txttotal.text=“12285,13”
paso con cdbl
xTotal=txttotal.text.cdbl
xTotal queda “12285,1299999999991996”

Alguien podria indicarme que debo hacer y como operar ya que segun la ayuda de xojo tendria que pasarme con los 2 digitos decimales que le estoy pasando y no alterarlo.
Ayuda de Xojo
Dim n As Double
n = CDbl(“12345”) //returns 12345
n = CDbl(“54.05car45”) //returns 54.05
n = CDbl(“123.45”) //returns 123.45
n = CDbl(“123 45”) //returns 123
n = CDbl(“123,456”) //returns 123456
n = CDbl(“auto”) //returns 0

Esto es tipico de Double imprecision.

Es mejor de calcular todo interno en INT64 y ayudar la coma a la presentation.

Hola Alicia,

Como dice Michel el resultado es correcto y lo esperado en tu caso. Double es un tipo de dato que tiene cierta precisin (limitada) y no puede expresar exactamente cualquier nmero. En tu ejemplo 12285,1299999999991996 es la representacin en Double ms cernana (ms exacta) de 12285,13.

Para evitar esa falta de precisin, como dice Michel, puedes trabajar con nmeros enteros para tus clculos (osea, 1228513 en tu ejemplo) y utilizar la coma slo para representar los valores en pantalla. Como los nmeros enteros s son precisos no vas a encontrar el problema que tienen los Double.

En cuanto a los ejemplos de la documentacin, su objetivo es mostrar qu ocurre cuanto el texto tiene cifras y letras mezcladas, no es un ejemplo en el que se pretenda mostrar el problema que te has encontrado.

Julen

hola, yo tambin he tenido exactamente los mismos problemas, sobre todo cuando se trata de precios y todo lo que est relacionado con el mundo de las finanzas, etc., de las ventas
Lo resuelto mediante la supresin de la cabeza de DOUBLE y el simple uso de CURRENCY

en el caso de uso con diferentes bases de datos SQLite se pueden definir los campos como DOUBLE, pero que leerlos y escribirlos:

rscadenze.field (“Precio”). CurrencyValue
row.CurrencyColumn (“Precio”)

prezzo.text = formato (numero_decimale_currency, “-. #, ###, ### 00”) aparece como: 1.123.123,45 nuestra notacin para la moneda