¿Cómo hago para escribir una función para convertir una cadena de número decimal a decimal y un número decimal a una cadena?Cómo convertir una cadena numérica a número (decimal) y número a cadena
Respuesta
Este ejemplo convierte una cadena numérica en un número.
(defn String->Number [str]
(let [n (read-string str)]
(if (number? n) n nil)))
muestra:
user=> (String->Number "4.5")
4.5
user=> (str 4.5)
"4.5"
user=> (String->Number "abc")
nil
Desde su pregunta, que parecen querer una función de activación, que es uno que puede leer en un número y convertirlo en una cadena y también leído en una cadena y vuelta un número, si la cadena contiene dígitos numéricos, como 123.0 o "123.0".
Aquí se muestra un ejemplo:
(defn cvt-str-num [val]
(if (try
(number? val)
(catch Exception e (str "Invalid number: " (.getMessage e))))
(str val)
(let [n-val (read-string val)]
(if (number? n-val)
n-val
nil))))
no podía ver una forma de evitar la unión de n-val let, ya que un lugar provisional se necesita para almacenar el valor de retorno de lectura cadena, por lo que podría ponerse a prueba como un número. Si es un número, se devuelve; else nil es devuelto.
Tenga en cuenta que read-string
le da un número de coma flotante, no es un decimal:
user=> (.getClass (read-string "1.01"))
java.lang.Double
El número que se obtiene de la parte posterior, como lo desea, pero no es, exactamente.
user=> (new BigDecimal (read-string "1.01"))
1.0100000000000000088817841970012523233890533447265625M
Puede utilizar java.math.BigDecimal
lugar y evitar complicaciones de punto flotante:
user=> (new BigDecimal "1.01")
1.01M
user=> (.toString (new BigDecimal "1.01"))
"1.01"
intente esto (cadena de lectura "1.01M") – BLUEPIXY
Hay funciones clojure muy convenientes para convertir de cualquier cosa a cuerda y de algo parecido a un número de BigDecimal:
user=> (bigdec "1234")
1234M
user=> (str 1234M)
"1234"
Supongo que esta es la manera canónica de Clojure.
Esta debería ser la respuesta aceptada. – nha
- 1. Convertir cadena a número decimal en ruby
- 2. rieles convertir cadena al número
- 3. Cómo convertir un número MAC a una cadena MAC?
- 4. ¿Cómo convertir una cadena numérica de 18 dígitos a BigInteger?
- 5. Convertir el número exponencial presentado como una cadena a un decimal
- 6. Cómo convertir cadena a número (flotante) en Perl
- 7. ¿Cómo convertir una cadena numérica con comas de valor de posición en un número entero?
- 8. ¿Cómo convertir una representación de cadena de un número a un número en coldfusion?
- 9. C# Convertir cadena decimal a Int
- 10. Convertir cadena a decimal con formato
- 11. Cómo convertir cadena en número en gnuplot
- 12. ¿Cómo convertir una cadena de notación científica a notación decimal?
- 13. SQL Cómo convertir un decimal a una cadena
- 14. ¿Cómo puedo convertir un número decimal a hexadecimal en VIM?
- 15. Cómo modificar std :: stod (cadena a doble) para separador decimal y número de dígitos
- 16. la conversión de una cadena que contiene decimal a largo
- 17. convertir una variable de cadena de JavaScript a decimal/dinero
- 18. Convertir una matriz de bytes en un número decimal como una cadena
- 19. Bash: ¿Cómo convertir un número en una cadena de mes?
- 20. Convertir cadena binaria en número entero
- 21. gran número a cadena en JavaScript
- 22. convertir un número entero en una cadena como 3
- 23. cómo hacer extraer número decimal de cadena en C#
- 24. Cómo convertir de una cadena a un número en Oracle utilizando la función TO_NUMBER con un punto decimal fijo char?
- 25. Cómo convertir valor de cadena binaria a decimal
- 26. ¿Cómo puedo convertir una cadena en un número en Perl?
- 27. cadena Convertir a 2 lugar
- 28. Javascript para convertir una cadena en un número?
- 29. Cómo convertir float o currency a una cadena localizada?
- 30. Python: La conversión de cadena en número decimal
@octopusgrabbus -Gracias por su ayuda. – BLUEPIXY
Probablemente no deberías usar esto en la vida real. Desde los documentos, puede ejecutar código arbitrario https://clojuredocs.org/clojure.core/read-string, que es una gran vulnerabilidad de seguridad. Creo que 'bigdec' es una mejor solución. –