2013-09-23 43 views
9

Sử dụng Go Tôi đang cố gắng tìm cách "tốt nhất" để định dạng số dấu chấm động thành một chuỗi. Tôi đã tìm kiếm các ví dụ tuy nhiên tôi không thể tìm thấy bất cứ điều gì mà trả lời cụ thể những câu hỏi mà tôi có. Tất cả những gì tôi muốn làm là sử dụng phương thức "tốt nhất" để định dạng một số dấu chấm động thành một chuỗi. Số vị trí thập phân có thể khác nhau nhưng sẽ được biết (ví dụ: 2 hoặc 4 hoặc số không). Một ví dụ về những gì tôi muốn đạt được là dưới đây. Dựa trên ví dụ bên dưới, tôi có nên sử dụng fmt.Sprintf() hoặc strconv.FormatFloat() hoặc cái gì khác? và mức độ sử dụng bình thường của mỗi sự khác biệt giữa mỗi loại là gì?Cách định dạng số dấu phẩy động vào một chuỗi bằng cách sử dụng Go

Tôi cũng không hiểu được ý nghĩa của việc sử dụng hoặc 32 hoặc 64 trong những điều sau đây mà hiện nay có 32:

strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

Ví dụ:

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 

    var (
     fAmt1 float32 = 999.99 
     fAmt2 float32 = 222.22 
    ) 

    var fResult float32 = float32(int32(fAmt1*100) +int32(fAmt2*100))/100 

    var sResult1 string = fmt.Sprintf("%.2f", fResult) 

    println("Sprintf value = " + sResult1) 

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

    println("FormatFloat value = " + sResult2) 

} 
+0

Hãy xem [Go, Golang, formatFloat: chuyển đổi số phao thành chuỗi] (http://stackoverflow.com/a/19101700/562769). Có một câu trả lời tốt hơn. –

Trả lời

13

Cả fmt.Sprintfstrconv.FormatFloat sử dụng cùng một chuỗi định dạng thường xuyên dưới bìa, vì vậy nên cho kết quả tương tự.

Nếu độ chính xác mà số cần được định dạng là biến, thì có thể dễ dàng sử dụng FormatFloat, vì tránh được việc phải tạo chuỗi định dạng như bạn làm với Sprintf. Nếu nó không bao giờ thay đổi, thì bạn cũng có thể sử dụng.

Đối số cuối cùng cho FormatFloat kiểm soát cách giá trị được làm tròn. Từ các tài liệu:

Nó vòng các kết quả giả định rằng bản gốc được lấy từ một giá trị dấu chấm động của bitSize bit (32 cho float32, 64 cho float64)

Vì vậy, nếu bạn là làm việc với các giá trị float32 như trong mã mẫu của bạn, sau đó vượt qua 32 là chính xác.

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