BasicOperator.go
package main
import (
"fmt"
"math/big"
"strconv"
)
// add ν¨μλ λ¬Έμμ΄ λ°°μ΄λ‘ ννλ μ«μλ€μ λν κ²°κ³Όλ₯Ό λ°νν©λλ€.
func add(vars []string) *big.Float {
result := big.NewFloat(0)
for _, varStr := range vars {
varVal, _, err := big.ParseFloat(varStr, 10, 0, big.ToZero)
if err != nil {
varVal = big.NewFloat(0)
}
result.Add(result, varVal)
}
return result
}
// sub ν¨μλ λ¬Έμμ΄ λ°°μ΄λ‘ ννλ μ«μλ€μ λΉΌκΈ° μ°μ°ν κ²°κ³Όλ₯Ό λ°νν©λλ€.
func sub(vars []string) *big.Float {
if len(vars) == 0 {
return big.NewFloat(0)
}
result, _, err := big.ParseFloat(vars[0], 10, 0, big.ToZero)
if err != nil {
result = big.NewFloat(0)
}
for i := 1; i < len(vars); i++ {
varVal, _, err := big.ParseFloat(vars[i], 10, 0, big.ToZero)
if err != nil {
varVal = big.NewFloat(0)
}
result.Sub(result, varVal)
}
return result
}
// mul ν¨μλ λ¬Έμμ΄ λ°°μ΄λ‘ ννλ μ«μλ€μ κ³±ν κ²°κ³Όλ₯Ό λ°νν©λλ€.
func mul(vars []string) *big.Float {
if len(vars) == 0 {
return big.NewFloat(0)
}
result, _, err := big.ParseFloat(vars[0], 10, 0, big.ToZero)
if err != nil {
result = big.NewFloat(0)
}
for i := 1; i < len(vars); i++ {
varVal, _, err := big.ParseFloat(vars[i], 10, 0, big.ToZero)
if err != nil {
varVal = big.NewFloat(0)
}
result.Mul(result, varVal)
}
return result
}
// div ν¨μλ λ¬Έμμ΄ λ°°μ΄λ‘ ννλ μ«μλ€μ λλ κ²°κ³Όλ₯Ό λ°νν©λλ€.
func div(vars []string) *big.Float {
if len(vars) == 0 {
return big.NewFloat(0)
}
result, _, err := big.ParseFloat(vars[0], 10, 0, big.ToZero)
if err != nil {
result = big.NewFloat(0)
}
for i := 1; i < len(vars); i++ {
varVal, _, err := big.ParseFloat(vars[i], 10, 0, big.ToZero)
if err != nil {
varVal = big.NewFloat(0)
}
result.Quo(result, varVal)
}
return result
}
// preciseAdd ν¨μλ μ§μ λ μμμ μ리μλ₯Ό μ¬μ©νμ¬ μ«μλ€μ λν κ²°κ³Όλ₯Ό λ°νν©λλ€.
func preciseAdd(vars []string, scale int) *big.Float {
if scale < 0 || scale > 10 {
scale = 0
}
left, _, err1 := big.ParseFloat(vars[0], 10, 0, big.ToZero)
right, _, err2 := big.ParseFloat(vars[1], 10, 0, big.ToZero)
if err1 != nil || err2 != nil {
return big.NewFloat(0)
}
result := new(big.Float).Add(left, right)
result.SetPrec(uint(scale))
return result
}
// preciseSub ν¨μλ μ§μ λ μμμ μ리μλ₯Ό μ¬μ©νμ¬ μ«μλ€μ λΊ κ²°κ³Όλ₯Ό λ°νν©λλ€.
func preciseSub(vars []string, scale int) *big.Float {
if scale < 0 || scale > 10 {
scale = 0
}
left, _, err1 := big.ParseFloat(vars[0], 10, 0, big.ToZero)
right, _, err2 := big.ParseFloat(vars[1], 10, 0, big.ToZero)
if err1 != nil || err2 != nil {
return big.NewFloat(0)
}
result := new(big.Float).Sub(left, right)
result.SetPrec(uint(scale))
return result
}
// preciseMul ν¨μλ μ§μ λ μμμ μ리μλ₯Ό μ¬μ©νμ¬ μ«μλ€μ κ³±ν κ²°κ³Όλ₯Ό λ°νν©λλ€.
func preciseMul(vars []string, scale int) *big.Float {
if scale < 0 || scale > 10 {
scale = 0
}
left, _, err1 := big.ParseFloat(vars[0], 10, 0, big.ToZero)
right, _, err2 := big.ParseFloat(vars[1], 10, 0, big.ToZero)
if err1 != nil || err2 != nil {
return big.NewFloat(0)
}
result := new(big.Float).Mul(left, right)
result.SetPrec(uint(scale))
return result
}
// preciseDiv ν¨μλ μ§μ λ μμμ μ리μλ₯Ό μ¬μ©νμ¬ μ«μλ€μ λλ κ²°κ³Όλ₯Ό λ°νν©λλ€.
func preciseDiv(vars []string, scale int) *big.Float {
if scale < 0 || scale > 10 {
scale = 0
}
left, _, err1 := big.ParseFloat(vars[0], 10, 0, big.ToZero)
right, _, err2 := big.ParseFloat(vars[1], 10, 0, big.ToZero)
if err1 != nil || err2 != nil {
return big.NewFloat(0)
}
result := new(big.Float).Quo(left, right)
result.SetPrec(uint(scale))
return result
}
// scale ν¨μλ μ£Όμ΄μ§ κ°μ μμμ μ리μλ₯Ό λ°νν©λλ€.
func scale(value string) int {
varVal, _, err := big.ParseFloat(value, 10, 0, big.ToZero)
if err != nil {
return 0
}
_, scale := varVal.Float64()
return scale
}
func main() {
// μμ μ¬μ©
nums := []string{"10.5", "5.5", "2"}
fmt.Println("Add:", add(nums))
fmt.Println("Sub:", sub(nums))
fmt.Println("Mul:", mul(nums))
fmt.Println("Div:", div(nums))
// Precise operations
fmt.Println("Precise Add:", preciseAdd([]string{"10.5", "5.5"}, 2))
fmt.Println("Precise Sub:", preciseSub([]string{"10.5", "5.5"}, 2))
fmt.Println("Precise Mul:", preciseMul([]string{"10.5", "5.5"}, 2))
fmt.Println("Precise Div:", preciseDiv([]string{"10.5", "5.5"}, 2))
}μ€λͺ
ν¨μ μ€λͺ
main ν¨μ
Last updated