Làm cách nào để viết một hàm để chuyển đổi chuỗi số thập phân thành số thập phân và số thập phân thành chuỗi?Cách chuyển đổi một chuỗi số thành số (thập phân) và số thành chuỗi
Trả lời
Ví dụ này chuyển đổi một chuỗi số thành một số.
(defn String->Number [str]
(let [n (read-string str)]
(if (number? n) n nil)))
mẫu:
user=> (String->Number "4.5")
4.5
user=> (str 4.5)
"4.5"
user=> (String->Number "abc")
nil
Từ câu hỏi của bạn, bạn dường như muốn có một chức năng chuyển đổi, đó là một trong đó có thể đọc trong một số và chuyển đổi thành một chuỗi và cũng đọc trong một chuỗi và trả lại một số, nếu chuỗi chứa các chữ số, như 123.0 hoặc "123.0".
Dưới đây là một ví dụ:
(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))))
Tôi không thể nhìn thấy một cách xung quanh let ràng buộc của n-val, bởi vì một vị trí tạm thời là cần thiết để lưu trữ giá trị trả về đọc chuỗi, vì vậy nó có thể được kiểm tra như một con số. Nếu nó là một số nó được trả về; khác nil được trả lại.
Lưu ý rằng read-string
cung cấp cho bạn một số dấu chấm động, không phải là một số thập phân:
user=> (.getClass (read-string "1.01"))
java.lang.Double
Số bạn trở lại in như những gì bạn muốn nhưng nó không phải là, chính xác.
user=> (new BigDecimal (read-string "1.01"))
1.0100000000000000088817841970012523233890533447265625M
Bạn có thể sử dụng java.math.BigDecimal
thay vào đó và tránh các biến chứng dấu chấm động:
user=> (new BigDecimal "1.01")
1.01M
user=> (.toString (new BigDecimal "1.01"))
"1.01"
thử điều này (đọc chuỗi "1.01M") – BLUEPIXY
Có chức năng clojure rất thuận tiện để chuyển đổi từ bất cứ điều gì để chuỗi và từ một cái gì đó giống như một số để BigDecimal:
user=> (bigdec "1234")
1234M
user=> (str 1234M)
"1234"
Tôi đoán đây là cách kinh điển.
Đây phải là câu trả lời được chấp nhận. – nha
- 1. SQL Cách chuyển đổi một số thập phân thành chuỗi
- 2. Python: Chuyển đổi chuỗi thành số thập phân số
- 3. Chuyển đổi chuỗi có chứa số thập phân thành Long
- 4. Chuyển đổi số thập lục phân thành chuỗi thành số âm, trong Perl
- 5. Chuyển đổi một mảng byte thành một số thập phân thành một chuỗi
- 6. Python Chuyển đổi phân số thành số thập phân
- 7. Chuyển chuỗi thành số thập phân trong ruby
- 8. đường ray chuyển đổi chuỗi thành số
- 9. Chuyển đổi số thập phân thành nhị phân trong R?
- 10. Chuyển đổi một phần văn bản thành số thập phân
- 11. Chuyển đổi chuỗi có chứa một số thành số nguyên
- 12. Chuyển đổi chuỗi thập lục phân thành số nguyên một cách hiệu quả trong C?
- 13. Chuyển đổi số bát phân và số thập lục phân thành cơ số 10
- 14. Chuyển đổi một số nguyên thành chuỗi thập lục phân trong Ruby
- 15. Chuyển đổi chuỗi số khoảng trắng được phân tách thành chuỗi thành số nguyên và đặt chúng trong các biến
- 16. Phân số chuỗi thành Double
- 17. Chuyển đổi chuỗi thập lục phân thành chuỗi nhị phân
- 18. SQL: Chuyển đổi một số nguyên thành chuỗi thập lục phân?
- 19. Chuyển đổi chuỗi đến 2 chữ số thập phân nơi
- 20. python cách chuyển đổi ngày giờ thành số thập phân
- 21. SQL Server Chuyển đổi số nguyên thành chuỗi nhị phân
- 22. Ruby - Chuyển đổi số nguyên thành chuỗi
- 23. Excel vba - chuyển đổi chuỗi thành số
- 24. Chuyển đổi số nguyên thành chuỗi
- 25. Chuyển đổi chuỗi thành trường số
- 26. Python: Chuyển đổi chuỗi thành số nguyên
- 27. Chuyển đổi các số có ký hiệu số mũ từ chuỗi thành hai hoặc số thập phân
- 28. Javascript để chuyển đổi chuỗi thành số?
- 29. Chuyển đổi chuỗi nhị phân thành số nguyên
- 30. chuyển chuỗi thành số nguyên trong C++
@octopusgrabbus -Cảm ơn sự giúp đỡ của bạn. – BLUEPIXY
Bạn có lẽ không nên sử dụng điều này trong cuộc sống thực. Từ các tài liệu, nó có thể thực thi mã tùy ý https://clojuredocs.org/clojure.core/read-string vốn là một lỗ hổng bảo mật rất lớn. Tôi nghĩ rằng 'bigdec' là một giải pháp tốt hơn. –