تبدیل بین اعداد و رشته ها یک کار رایج است، بنابراین اگر با این تکنیک ها آشنا باشید، زمان زیادی را صرفه جویی می کنید و اشکالات را کاهش می دهید.
قالب بندی صحیح اعداد می تواند کار دشواری باشد. و قالببندی ارزها چالشهای دیگری از جمله بومیسازی را به همراه دارد. خوشبختانه، Go ویژگی هایی برای کمک به شما دارد.
کتابخانه استاندارد Go ابزارهای مختلفی برای قالب بندی اعداد ارائه می دهد. بسته strconv شامل توابعی برای تجزیه و تبدیل اعداد به و از رشته ها است.
بسته strconv
بسته strconv یک ابزار قدرتمند برای تبدیل بین اعداد و رشته ها است. می توانید از آن برای کار با اعداد در قالب های مختلف استفاده کنید.
strconv بخشی از کتابخانه استاندارد است، بنابراین با بسیاری از مفاهیم اولیه Go که باید با آنها آشنا باشید مرتبط است. در اینجا نحوه وارد کردن آن آمده است:
import "strconv"
این بسته توابعی برای تبدیل اعداد به رشته ها و از رشته ها در قالب های مختلف ارائه می دهد. این شامل توابعی برای کار با اعداد صحیح و اعداد ممیز شناور است.
strconv همچنین میتواند تبدیل به فرمتهای باینری، هشتگانه و هگزا دسیمال و همچنین نمادگذاری علمی را انجام دهد.
قالب بندی اعداد صحیح در Go
تابع Itoa بسته strconv عملکردی را برای تبدیل اعداد صحیح به رشته ها فراهم می کند. تابع Itoa یک عدد صحیح می گیرد و نمایش رشته آن عدد صحیح را برمی گرداند.
import (
"fmt"
"strconv"
)
func main() {
integers := 3043
stringVersion := strconv.Itoa(integers)
fmt.Println(stringVersion) // Output: "3043"
}
این کد یک مقدار صحیح را با استفاده از Itoa به رشته تبدیل می کند. سپس رشته حاصل را با استفاده از بسته fmt به کنسول خروجی می دهد.
علاوه بر تابع Itoa، strconv ارائه می دهد:
- FormatInt برای قالب بندی اعداد صحیح به عنوان رشته هایی با پایه معین
- AppendInt برای الحاق اعداد صحیح به صورت رشته ای به تکه ای از بایت ها.
در اینجا نحوه استفاده از تابع FormatInt برای فرمت یک عدد صحیح آمده است:
import (
"fmt"
"strconv"
)
func main() {
integers := 12345
strings := strconv.FormatInt(int64(integers), 10)
fmt.Println(strings) // Output: "12345"
}
این کد از int64() برای تبدیل مقدار اصلی به یک عدد صحیح 64 بیتی استفاده می کند. سپس نتیجه را به FormatInt به همراه یک پایه برای تبدیل، در این مورد 10 ارسال می کند. FormatInt رشته ای را برمی گرداند که Println سپس به کنسول خروجی می دهد.
تابع AppendInt یک برش بایت، یک مقدار int64 و یک پایه می گیرد.
import (
"fmt"
"strconv"
)
func main() {
integers := 12345
byteSlice := make([]byte, 0, 20)
byteSlice = strconv.AppendInt(byteSlice, int64(integers), 10)
fmt.Println(string(byteSlice)) // Output: "12345"
}
توجه داشته باشید که AppendInt یک تکه بایت برای اضافه کردن دریافت می کند و برش بایت حاصل را برمی گرداند. در این حالت، برش بایت اولیه خالی است، اما ظرفیت 20 را برای ذخیره نمایش رشته حاصل از عدد صحیح دارد.
تجزیه رشته ها به عنوان اعداد صحیح
تابع Atoi رشته ها را به اعداد صحیح تبدیل می کند. یک رشته را به عنوان ورودی می گیرد و یک نمایش عدد صحیح از آن رشته را به همراه یک نوع خطا برمی گرداند.
در اینجا نحوه استفاده از تابع Atoi برای تبدیل رشته به عدد صحیح آمده است:
import (
"fmt"
"strconv"
)
func main() {
strings := "123"
integers, err := strconv.Atoi(strings)
if err != nil {
fmt.Println(err)
}
fmt.Println(integers)
}
برنامه مقدار صحیح را به کنسول خروجی می دهد:
همچنین می توانید از تابع ParseUint برای تجزیه نمایش رشته اعداد صحیح بدون علامت استفاده کنید.
package main
import (
"fmt"
"strconv"
)
func main() {
// parse string as base 10 and 0-bit unsigned integer
val, err := strconv.ParseUint("12345", 10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(val) // Output: 12345
}
}
تابع ParseUint رشته 12345 را به عنوان یک عدد صحیح پایه ده و بدون علامت تجزیه می کند. اندازه 0 بیت تضمین می کند که یک نوع int استاندارد را برمی گرداند. مقدار تجزیه شده و یک خطا را برمی گرداند.
می توانید از تابع ParseFloat برای تجزیه نمایش رشته ای از یک عدد ممیز شناور استفاده کنید.
import (
"fmt"
"strconv"
)
func main() {
// parse string as 64-bit floating-point number
val, err := strconv.ParseFloat("3.14", 64)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(val) // Output: 3.14
}
}
تابع ParseFloat رشته را به عنوان یک عدد ممیز شناور 64 بیتی تجزیه می کند و رشته و یک نوع خطا را برمی گرداند.
قالب بندی ارزها در Go
ساختن اپلیکیشنی که با ارزها تعامل داشته باشد نیاز به قالب بندی و تجزیه اعداد دارد. کار با ارزهای مختلف می تواند یک چالش باشد، اما بسته های strconv و حسابداری می توانند به شما در قالب بندی آنها کمک کنند.
در اینجا نحوه تجزیه یک رشته ارز به یک شناور برای عملیات روی ارز آورده شده است:
import (
"fmt"
"strconv"
)
func main() {
// Currency string to parse
currencyStr := "$1,234.56"
// Remove the currency symbol and convert to a float
floatVal, err := strconv.ParseFloat(currencyStr[1:], 64)
if err != nil {
fmt.Println(err)
return
}
// Print the parsed float value
fmt.Println(floatVal) // Output: 1234.56
}
متغیر currencyStr یک نمایش رشته ای از ارزش ارز با علامت دلار به عنوان نماد است. این برنامه از تابع ParseFloat برای تجزیه رشته ارز از عنصر دوم (بعد از نماد ارز) استفاده می کند.
به طور معمول، بهتر است از استفاده از شناورها برای ارزها خودداری کنید زیرا ممکن است منجر به اشتباه در محاسبات و اشکال در تولید شود.
از طرف دیگر، میتوانید از یک بسته شخص ثالث مانند حسابداری استفاده کنید که قابلیت قالببندی و تجزیه ارزها را دارد.
این دستور ترمینال را در فهرست پروژه خود اجرا کنید تا بسته حسابداری را نصب کنید:
go get github.com/leekchan/accounting
با ایجاد نمونه ای از ساختار حسابداری شروع کنید. به یاد بیاورید که سازه ها یکی از ویژگی های اصلی شیء گرا هستند ، شبیه به کلاس های دیگر زبانها. از جمله گزینه های دیگر می توانید یک نمونه حسابداری را با یک نماد ارز و یک مقدار دقیق تنظیم کنید.
می توانید از تابع FormatMoney بسته حسابداری برای قالب بندی اعداد به ارز استفاده کنید.
package main
import (
"fmt"
"math/big"
"github.com/leekchan/accounting"
)
func main() {
ac := accounting.Accounting{Symbol: "$", Precision: 2}
fmt.Println(ac.FormatMoney(123456789.213123))
fmt.Println(ac.FormatMoney(12345678))
fmt.Println(ac.FormatMoney(big.NewRat(77777777, 3)))
fmt.Println(ac.FormatMoney(big.NewRat(-77777777, 3)))
fmt.Println(ac.FormatMoneyBigFloat(big.NewFloat(123456789.213123)))
}
متغیر ac نمونه حسابداری است. این برنامه مقادیر پولی را با استفاده از روش های FormatMoney و FormatMoneyBigFloat نمونه حسابداری قالب بندی و چاپ می کند. تابع NewRat از بسته بزرگ یک عدد گویا را با یک صورت و مخرج ایجاد می کند. تابع NewFloat به نمایش اعداد ممیز شناور بزرگ کمک می کند.
Go می تواند به شما در قالب بندی انواع دیگر نیز کمک کند
Go توابع زیادی را برای تبدیل اعداد و ارزها به روشی ساده ارائه می دهد.
این زبان همچنین یک سیستم قالب بندی رشته قدرتمند را ارائه می دهد. تابع Sprintf الهام گرفته از C بسته fmt به شما امکان می دهد رشته های فرمت شده را با استفاده از یک نحو خاص مکان نگهدار ایجاد کنید. میتوانید از Sprintf برای ساخت رشتههایی که شامل اعداد و ارزشهای ارز هستند، استفاده کنید و ایجاد خروجی قابل خواندن برای انسان را آسان میکند.