// number_ops — 數字操作 // 支援: round, floor, ceil, abs, add, subtract, multiply, divide, mod, min, max, format // //go:build tinygo package main import ( "encoding/json" "io" "math" "os" "strconv" ) type Args struct { Value float64 `json:"value"` Decimals int `json:"decimals"` } type Input struct { Operation string `json:"operation"` Input float64 `json:"input"` Args Args `json:"args"` } func main() { raw, err := io.ReadAll(os.Stdin) if err != nil { writeError("failed to read stdin: " + err.Error()) return } var input Input if err := json.Unmarshal(raw, &input); err != nil { writeError("invalid input JSON: " + err.Error()) return } if input.Operation == "" { writeError("operation 必填") return } var result interface{} switch input.Operation { case "round": result = math.Round(input.Input) case "floor": result = math.Floor(input.Input) case "ceil": result = math.Ceil(input.Input) case "abs": result = math.Abs(input.Input) case "add": result = input.Input + input.Args.Value case "subtract": result = input.Input - input.Args.Value case "multiply": result = input.Input * input.Args.Value case "divide": if input.Args.Value == 0 { writeError("除數不能為 0") return } result = input.Input / input.Args.Value case "mod": if input.Args.Value == 0 { writeError("除數不能為 0") return } result = math.Mod(input.Input, input.Args.Value) case "min": result = math.Min(input.Input, input.Args.Value) case "max": result = math.Max(input.Input, input.Args.Value) case "format": decimals := input.Args.Decimals if decimals < 0 { decimals = 0 } result = strconv.FormatFloat(input.Input, 'f', decimals, 64) default: writeError("不支援的 operation: " + input.Operation) return } out, _ := json.Marshal(map[string]interface{}{ "success": true, "data": map[string]interface{}{ "result": result, "operation": input.Operation, }, }) os.Stdout.Write(out) } func writeError(msg string) { out, _ := json.Marshal(map[string]interface{}{"success": false, "error": msg}) os.Stdout.Write(out) }