snum

package module
v0.0.0-...-e61d366 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2022 License: MIT Imports: 7 Imported by: 0

README

go-snum

정렬 가능한 string number 인/디코더

implement ericlagergren/decimal ( github.com/ericlagergren/decimal )

=====================================================================

byte encoding 시 가능한 용량 한도

  1. bt__sorted 1-1. 양수 : 65 byte (header 1 bt + body 64 bt) 1-2. 음수 : 66 byte (header 1 bt + body 64 bt + 0xFF 1 bt)

  2. bt__unsorted 2-1. 양수 : 55 byte (header 1 bt + body 54 bt) 2-2. 음수 : 55 byte (header 1 bt + body 54 bt)

buf[0] 헤더

  • 255 = 정수 자릿수가 96 자리인 양수 ( 1e95 <= x < 1e96 )

  • 254 = 정수 자릿수가 95 자리인 양수 ( 1e94 <= x < 1e95 ) ..... ( 양의 정수 )

  • 160 = 정수 자릿수가 1 자리인 양수 ( 1 <= x < 10 )

  • 159 = 정수 자릿수가 -1 자리인 양수 ( 0.1 <= x < 1 ) ..... ( 양의 소수 )

  • 128 = 정수 자릿수가 -32 자리인 양수 ( 0 <= x < 1e-31 ) - !! 0 포함 !!

  • 127 = 정수 자릿수가 -32 자리인 음수 ( -1e-31 < x <= -1e-32 ) ..... ( 음의 소수 )

  • 96 = 정수 자릿수가 -1 자리인 음수 ( -1 < x <= -0.1 )

  • 95 = 정수 자릿수가 1 자리인 음수 ( -10 < x <= -1 ) ..... ( 음의 정수 )

  • 1 = 정수 자릿수가 95 자리인 음수 ( -1e95 < x <= -1e94 )

  • 0 = 정수 자릿수가 96 자리인 음수 ( -1e96 < x <= -1e95 )

buf[1:]

  • 정수 + 소수 big.Int 에 담아 2자릿수 당 1바이트 로 압축한 byte array
  • 음수일 경우 보수로 저장

Documentation

Index

Constants

View Source
const (
	DEF_s_dot                         string = "."
	DEF_s_plus                        string = "+"
	DEF_s_minus                       string = "-"
	DEF_s_num_zero                    string = "0"
	DEF_n_len_extend_decimal_for_calc int    = 20
	DEF_n_base_10                     int    = 10

	DEF_n_bt__len_min_data  int = 1 // 숫자가 zero (0) 인 경우도 1 byte 를 사용 함 - big.int 스팩이 아니라 자체 스팩
	DEF_n_bt__len_min_total int = DEF_n_header__size + DEF_n_bt__len_min_data

	DEF_n_header__size                    int  = 1
	DEF_b1_header__bit_mask__sign         byte = 128 // 1000 0000
	DEF_b1_header__bit_mask__standard_len byte = 127 // 0111 1111
	DEF_b1_header__bit_mask__high_4_bit   byte = 240 // 1111 0000
	DEF_b1_header__bit_mask__low_4_bit    byte = 15  // 0000 1111
	DEF_b1_header__value__sign__plus      byte = DEF_b1_header__bit_mask__sign
	DEF_b1_header__max_len__standard      int  = 96
	DEF_b1_header__max_len__decimal       int  = 32
)

Variables

View Source
var (
	Err_not_a_number      error = errors.New("NaN")
	Err_header_not_enongh error = errors.New("header not enough")
	Err_div_by_zero       error = errors.New("division by zero")
)
View Source
var Fn_is_digit = regexp.MustCompile(`(^[+-]?\d{0,96}(\.\d{1,32})?$)`).MatchString // 정수 96 자리 , 소수점 32 자리 제한

Functions

func Abs__str

func Abs__str(_sn string) (sn string, err error)

func Add__str

func Add__str(_a, _b string) (sn string, err error)

func Cmp__str

func Cmp__str(_sn_a, _sn_b string) (n_cmp int, err error)

func Div__str

func Div__str(_a, _b string) (sn string, err error)

func Mul__str

func Mul__str(_a, _b string) (sn string, err error)

func Neg__str

func Neg__str(_sn string) (sn string, err error)

func Pow

func Pow(_sn string, _n8_num int64) (sn string, err error)

func Pow10

func Pow10(_n8_num int64) (sn string, err error)

func Round__str

func Round__str(_sn string, _n_step_size int) (sn string, err error)

func Round_down__str

func Round_down__str(_sn string, _n_step_size int) (sn string, err error)

func Round_up__str

func Round_up__str(_sn string, _n_step_size int) (sn string, err error)

func Sub__str

func Sub__str(_a, _b string) (sn string, err error)

Types

type Snum

type Snum struct {
	// contains filtered or unexported fields
}

func Add

func Add(_a *Snum, _b *Snum) (pt_ret *Snum)

func Div

func Div(_a *Snum, _b *Snum) (pt_ret *Snum)

func Mul

func Mul(_a *Snum, _b *Snum) (pt_ret *Snum)

func Sub

func Sub(_a *Snum, _b *Snum) (pt_ret *Snum)

func (*Snum) Abs

func (t *Snum) Abs()

func (*Snum) Add

func (t *Snum) Add(_pt *Snum)

func (*Snum) Add__str

func (t *Snum) Add__str(_sn string) (err error)

func (*Snum) Cmp

func (t *Snum) Cmp(_pt *Snum) int

if( t < _pt ) -> -1 if( t == _pt ) -> 0 if( t > _pt ) -> +1

func (*Snum) Cmp__str

func (t *Snum) Cmp__str(_sn string) (n_cmp int)

func (*Snum) Copy

func (t *Snum) Copy() *Snum

func (*Snum) Div

func (t *Snum) Div(_pt *Snum)

func (*Snum) Div__str

func (t *Snum) Div__str(_sn string) (err error)

func (*Snum) Get__raw

func (t *Snum) Get__raw() (s_raw string, n_len_decimal int, is_minus bool)

func (*Snum) Get__str

func (t *Snum) Get__str() (s_num string, err error)

func (*Snum) Get__uint64

func (t *Snum) Get__uint64() (u8_num uint64, err error)

func (*Snum) Group_down

func (t *Snum) Group_down(_n_step_size int)

Output:

x         step_size      Group_down      Group_up
123.321          -4         123.321       123.321
123.321          -3         123.321       123.321
123.321          -2         123.32        123.33
123.321          -1         123.3         123.4
123.321           0         123           124
123.321           1         120           130
123.321           2         100           200
123.321           3         0             1000
123.321           4         0             10000

func (*Snum) Group_up

func (t *Snum) Group_up(_n_step_size int)

func (*Snum) Init

func (t *Snum) Init(_len_standard, _len_decimal int)

func (*Snum) Is_zero

func (t *Snum) Is_zero() bool

func (*Snum) Is_zero__over

func (t *Snum) Is_zero__over() bool

func (*Snum) Is_zero__under

func (t *Snum) Is_zero__under() bool

func (*Snum) MarshalJSON

func (t *Snum) MarshalJSON() ([]byte, error)

for interface - package json

func (*Snum) Mul

func (t *Snum) Mul(_pt *Snum)

func (*Snum) Mul__str

func (t *Snum) Mul__str(_sn string) (err error)

func (*Snum) Neg

func (t *Snum) Neg()

func (*Snum) Pow

func (t *Snum) Pow(_num int64)

func (*Snum) Round

func (t *Snum) Round(_step_size int)

Output:

  x      Round      Round_down      Round_up
2.6          3               2             3
2.5          3               2             3
2.1          2               2             3
2            2               2			   2

-2.1 -2 -2 -3 -2.5 -3 -2 -3 -2.6 -3 -2 -3

func (*Snum) Round_down

func (t *Snum) Round_down(_step_size int)

func (*Snum) Round_up

func (t *Snum) Round_up(_step_size int)

func (*Snum) Set__raw

func (t *Snum) Set__raw(_s_raw string, _n_len_decimal int, _is_minus bool)

func (*Snum) Set__str

func (t *Snum) Set__str(_s_num string) (err error)

func (*Snum) Set__uint64

func (t *Snum) Set__uint64(_u8_num uint64) (err error)

func (*Snum) Set__zero

func (t *Snum) Set__zero()

func (*Snum) String

func (t *Snum) String() string

func (*Snum) Sub

func (t *Snum) Sub(_pt *Snum)

func (*Snum) Sub__str

func (t *Snum) Sub__str(_sn string) (err error)

func (*Snum) Trim_digit

func (t *Snum) Trim_digit() error

func (*Snum) UnmarshalJSON

func (t *Snum) UnmarshalJSON(_bt []byte) error

for interface - package json

type T_Encoder

type T_Encoder struct {
	Snum
}

func (*T_Encoder) Decode

func (t *T_Encoder) Decode(_bt_num []byte) (err error)

func (*T_Encoder) Encode

func (t *T_Encoder) Encode() (bt_ret []byte, err error)

func (*T_Encoder) Init

func (t *T_Encoder) Init()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL