Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.39 KB | None | 0 0
  1. // Accept a floating point number and display it comma-separated
  2. // author: Alessio Treglia <quadrispro@ubuntu.com>
  3. package main
  4.  
  5. import (
  6.     "bytes"
  7.     "fmt"
  8.     "os"
  9.     "path/filepath"
  10.     "strconv"
  11.     "strings"
  12. )
  13.  
  14. func comma(s string) (string, error) {
  15.     const places int = 3
  16.     var buf bytes.Buffer
  17.     var offset, startCur, endCur, sLength int
  18.  
  19.     sLength = len(s)
  20.     endCur = sLength
  21.     if endCur == 0 {
  22.         return s, nil
  23.     }
  24.     if point := strings.Index(s, "."); point != -1 {
  25.         endCur = point
  26.     }
  27.     if sign := s[0]; sign == '+' || sign == '-' {
  28.         buf.WriteByte(sign)
  29.         offset++
  30.         startCur++
  31.         endCur--
  32.     }
  33.  
  34.     offset += endCur % places
  35.  
  36.     if offset > startCur {
  37.         if _, err := buf.WriteString(s[startCur:offset]); err != nil {
  38.             return s, err
  39.         }
  40.     }
  41.     for ; offset < endCur; offset += places {
  42.         if offset-startCur != 0 {
  43.             buf.WriteRune(',')
  44.         }
  45.         buf.WriteString(s[offset : offset+places])
  46.     }
  47.     if sLength > endCur+1 {
  48.         buf.WriteString(s[endCur+1 : sLength])
  49.     }
  50.  
  51.     return buf.String(), nil
  52. }
  53.  
  54. func main() {
  55.     ProgName := filepath.Base(os.Args[0])
  56.     for _, arg := range os.Args[1:] {
  57.         if _, err := strconv.ParseFloat(arg, 64); err != nil {
  58.             fmt.Fprintf(os.Stderr, "%s: error -- %v\n", ProgName, err)
  59.         } else {
  60.             if sWithCommas, err := comma(arg); err != nil {
  61.                 fmt.Fprintf(os.Stderr, "%s: error -- %v\n", ProgName, err)
  62.             } else {
  63.                 fmt.Println(sWithCommas)
  64.             }
  65.         }
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement