Si tengo una función que recibe dos parámetros p1 y p2 y necesito hacer una operación matemática entre ellos, debo tener en cuenta el formato en el que llegan esos valores y la cultura de la máquina en la que se está corriendo la función.

Ejemplo:

p1=40 p2=2.5

Function Resta(p1, p2)

return Convert.ToDouble(p1) - Convert.ToDouble(p2)

End Function

Si la cultura de la máquina está en español, la conversión de p2 a Double dará como resultado 25 ya que el punto no es un separador decimal para la cultura. En ese caso la función devolverá 15 en lugar de 37.5

Si sabemos que el parámetro p2 viene con separador decimal en “.” debemos asegurarnos que la conversión a Double use la cultura correspondiente a ese separador, por ejemplo “en-US”

Nuestra función quedaría así entonces:

Function Resta(p1, p2)
Dim culture as System.Globalization.CultureInfo = new System.Globalization.CultureInfo("en-US")
return Convert.ToDouble(p1, culture) - Convert.ToDouble(p2, culture)

End Function

En este caso la función devolverá correctamente 37.5