2011-01-28 31 views
10

Làm thế nào để chuyển đổi một phao sang một chuỗi trong F #. Tôi đang tìm kiếm một chức năng với chữ ký này:chuyển đổi một phao thành chuỗi trong F #?

float -> string

+2

Nó thực sự phụ thuộc vào cách bạn muốn chuỗi kết quả tìm kiếm. Nó có thể tinh tế hơn bạn nghĩ :-) –

Trả lời

12
> sprintf "%f";; 
val it : (float -> string) = <fun:[email protected]> 
+0

cảm ơn. – Ramy

+0

không thể chọn câu trả lời trong 11 phút vì một số lý do. Vì vậy ... tôi quên nó trong khoảng một ngày. – Ramy

3
string;; 
val it : (obj -> string) = <fun:[email protected]> 
+0

Chữ ký là lừa đảo ở đây, vì 'chuỗi' là một hàm được tối ưu hóa nội tuyến tĩnh và, khi được sử dụng với float, dịch thành một cái gì đó như' let x = 3.2 in (# "" x: float #). ToString ("g", System.Globalization.CultureInfo.InvariantCulture) '. Ràng buộc chữ ký như '(string: float-> string)' là một minh hoạ tốt hơn tôi nghĩ. –

+0

Tôi đồng ý. MSDN cũng liệt kê nó như là toán tử đúc. http://msdn.microsoft.com/en-us/library/dd233220.aspx Tôi tưởng tượng hầu hết mọi người sẽ muốn sử dụng sprintf "% f" để bạn có thể định dạng float theo cách bạn muốn. – gradbot

8

Sử dụng 'string' chức năng.

string 6.3f 
+2

Ngoài ra, bạn có chức năng chuyển đổi tương đương với các kiểu cơ bản khác với các hàm 'int',' uint32', 'float32',' byte', 'char',' thập phân', v.v. – Stringer

2

Chỉ cần để khỏa lấp những câu trả lời:

(fun (x:float) -> x.ToString()) 

:)

+0

Điều này thật thú vị khi chỉ xem nhanh như thế nào những người khác sẽ đăng và bỏ phiếu. – gradbot

+2

Cũng có thể thêm vào 'System.Convert.ToString' nếu bạn đang cố gắng làm tròn câu trả lời;) – Jimmy

+0

@gradbot: Nó được trả lời nhanh, nhưng tất cả các câu trả lời đều bỏ qua các khía cạnh tinh tế của nền văn hóa vui nhộn :-)! –

23

Như những người khác chỉ ra, có một vài lựa chọn. Hai cách đơn giản nhất là gọi phương thức ToString và sử dụng hàm string. Có một sự khác biệt tinh tế giữa hai điều mà bạn nên biết. Dưới đây là những gì họ thực hiện trên hệ thống của tôi:

> sprintf "%f" 1.2;; 
val it : string = "1.200000" 
> string 1.2;; 
val it : string = "1.2" 
> 1.2.ToString();; 
val it : string = "1,2" 

Hai loại đầu tiên khác nhau, nhưng cả hai đều có ý nghĩa, nhưng tại sao cái cuối lại khác "1,2"?

Đó là vì tôi có cài đặt vùng Séc nơi dấu thập phân được viết là dấu phẩy (doh!) Vì vậy, hàm string sử dụng văn bản bất biến trong khi ToString sử dụng văn hóa hiện tại (của một chuỗi). Trong một số nền văn hóa kỳ lạ (như tiếng Séc :-)) điều này có thể gây ra rắc rối! Bạn cũng có thể chỉ định này một cách rõ ràng với phương pháp ToString:

> 1.2.ToString(System.Globalization.CultureInfo.InvariantCulture);; 
val it : string = "1.2" 

Vì vậy, việc lựa chọn phương pháp này có thể sẽ phụ thuộc vào cách bạn muốn sử dụng chuỗi - để trình bày, bạn nên tuân thủ cài đặt hệ điều hành, nhưng để tạo ra các tệp di động, bạn có thể muốn văn hóa bất biến.

+0

Điểm tốt, tôi cũng có "1,2" :). Thực tế thú vị: các nền văn hóa kỳ lạ gần như ngừng phát triển ALGOL theo [wikipedia] (http://en.wikipedia.org/wiki/Decimal_mark "Dấu thập phân"). – Stringer

+0

Có một sự khác biệt giữa hàm 'chuỗi' và phương thức' ToString'. Hãy thử áp dụng chúng cho 'null' và' None'. Trong khi 'string' luôn trả về một chuỗi rỗng, phương thức' ToString' bị treo. –

Các vấn đề liên quan