Commit graph

114 commits

Author SHA1 Message Date
Igor Mikushkin
bf9a39e28b Addressing rounding and overflow issues in NewFromFloatWithExponent (#77)
* Additional (and some breaking) tests for NewFromFloatWithExponent

* Addressing tests for NewFromFloatWithExponent

* Naming cosmetic correction

* removing unused code

* Improving FromFloatWithExponent

* Addressing special meaning of zero exponent in float64

* NewFromFloatWithExponent: subnormals support

* NewFromFloatWithExponent: just a few additional test cases

* NewFromFloatWithExponent: optimization and some documentation

* NewFromFloatWithExponent: optimizations

* NewFromFloatWithExponent: optimizations
2018-03-01 16:29:13 -05:00
ivahaev
e3482495ff Added ensureInitialized() to the Neg() method (#80)
* Added ensureInitialized to the Neg() method,
because it can panic when d.value is nil

* TestDecimal_NegFromEmpty added
2018-01-26 16:25:43 -05:00
Chad Gilbert
a76a8bf60b Fix broken RoundBank func in #75 (#76) 2018-01-18 17:52:17 -05:00
tbrs
9ca7f51822 Fix Floor() and Ceil() for integer values (#64)
Implementation of aforementioned methods applied an integer multiplier
to int part, and rejected the exponent. This did not work well for
positive exponent values - multiplier was supposed to be a non-integer
value less than 1, but was rounded up to it. This caused different
results for equal Decimal values like decimal.New(19, 1) and
decimal.New(1900, -1).

Now functions return the receiver if it represents an integer value.
This also reduces execution time for previously broken cases.
2017-11-08 17:52:54 -05:00
Cyrill Schumacher
faaed5fca7 Implement Swedish/Cash rounding fixes #63 (#66)
Performance and allocations not that good but can be optimized later.

RoundSwedish aka Cash/Penny/öre rounding rounds decimal to a specific
interval. The amount payable for a cash transaction is rounded to the nearest
multiple of the minimum currency unit available. The following intervals are
available: 5, 10, 15, 25, 50 and 100; any other number throws a panic.
    5:   5 cent rounding 3.43 => 3.45
   10:  10 cent rounding 3.45 => 3.50 (5 gets rounded up)
   15:  10 cent rounding 3.45 => 3.40 (5 gets rounded down)
   25:  25 cent rounding 3.41 => 3.50
   50:  50 cent rounding 3.75 => 4.00
  100: 100 cent rounding 3.50 => 4.00
For more details: https://en.wikipedia.org/wiki/Cash_rounding

BenchmarkDecimal_RoundSwedish/five-4         	 1000000	      1918 ns/op	    1164 B/op	      30 allocs/op
BenchmarkDecimal_RoundSwedish/fifteen-4      	  300000	      4331 ns/op	    2940 B/op	      74 allocs/op
2017-10-20 10:00:25 -04:00
MOZGIII
ad668bb369 Added JSON support for NullDecimal (#62)
* Corrected NullDecimal comment

Saying that NullDecimal is immutable is just incorrect, and we don't need
to duplicate the description of properties of a Decimal type here.

* Added UnmarshalJSON and MarshalJSON support for NullDecimal

* Added tests for JSON operations on NullDecimal

* Fixed mistakes in tests
2017-10-10 12:21:51 -04:00
Rigel
aed1bfe463 Added Banker Rounding (#61)
* made GTE/GT/LT/LTE go-lint compliant

* added banker rounding and tests (RoundBank, StringFixedBank)
2017-09-11 08:58:34 -04:00
Dan Mayor
730de27aa5 Suggesting Sum and Avg methods (provided unit tests), recommending removing val2 from for range loops in TestBinary & TestGobEncode (#60) 2017-09-05 09:57:20 -04:00
klokare
b9ab2bce74 Add null support to UnmarshalJSON (#58)
Unmarshal null into zero value
2017-08-15 22:25:21 -04:00
Matthew Lane
3c692774ac Added NewFromBigInt constructor & unit test (#56) 2017-07-28 15:12:53 -04:00
Rigel
16a9418214 added GT, GTE, LT, LTE (#54)
* added GT, GTE, LT, LTE

* GTE -> GreaterThanOrEqual
2017-05-17 18:01:17 -04:00
mattdee123
d5fda14026 Defensive Copy on Coefficient (#52) 2017-05-17 10:58:21 -04:00
Bastien Gysler
3868940cdd Fix GobDecode (#51)
This commit fixes GobDecode, which were mutating a copy of the receiver, rather than the intended pointed struct.
2017-05-09 08:51:20 -04:00
Evan Shaw
4b9150b187 Add Neg method (#48)
Neg provides an easy way to negate a Decimal.
2017-02-21 13:39:36 -05:00
Victor Quinn
77e6b496f6 Fix same issue as #39 but without changing the Value() interface 2017-02-21 13:34:52 -05:00
Victor Quinn
ed31524af4 Add GobEncode and GobDecode, fixes the issue raised in #23 but with Marshal/UnmarshalBinary 2017-02-21 13:23:18 -05:00
klokare
15474de08e Binary Marshalling Support (#49)
Adds MarshalBinary and UnmarshalBinary methods
2017-02-19 22:31:54 -05:00
Victor Quinn
4570ccd0d5 Merge pull request #38 from edsrzf/sign
Add Sign method
2017-02-15 21:22:53 -05:00
Victor Quinn
2aa9963045 Pass lint, add travis stuff to run golint 2017-02-15 18:55:38 -05:00
Victor Quinn
de8af6d48f Merge pull request #42 from chrisguiney/expose-coefficient
Expose a Coefficient() function
2017-02-15 17:39:50 -05:00
Victor Quinn
c0815674f8 Merge pull request #32 from craigjackson/null_decimal
Added NullDecimal. Changed Decimal to implement driver.Valuer.

NOTE: This is potentially a breaking change as it reverts #16
2017-02-15 17:37:35 -05:00
Jason Biegel
4e5e2ed948 Remove insignificant digits during string parsing 2017-02-07 12:33:26 -05:00
Evan Shaw
1aec7720a8 Add Sign method
d.Sign() is a more convenient way of saying d.Cmp(Zero).
2017-02-07 10:46:18 +13:00
Victor Quinn
5471f2c322 Merge pull request #44 from bgaifullin/master
Added method Equal instead of method Equals
2017-02-06 10:49:37 -05:00
Bulat Gaifullin
0460d2dd77 Added method Equal instead of method Equals 2017-02-06 18:46:03 +03:00
Victor Quinn
b8c85eb1cf Merge pull request #29 from martinlindhe/pow
add Pow() (fix #26)
2017-02-03 18:13:37 -05:00
Victor Quinn
ea75adedfe Merge pull request #12 from raverkamp/master
replaced divsion code
2017-01-30 10:08:29 -05:00
Chris Guiney
c1c27c221b Expose a Coefficient() function 2017-01-16 14:54:52 -08:00
Craig Jackson
f03103a27d Have NullDecimal.Value() use Decimal.Value(). 2016-11-10 16:07:19 -07:00
Craig Jackson
02487a179e Added NullDecimal. Changed Decimal to implement driver.Valuer.
From comments in PR 16.
2016-11-02 10:15:14 -06:00
Martin Lindhe
8a97b04143 add Pow() 2016-09-19 23:54:54 +02:00
Vadim Graboys
d6f52241f3 allow optional marshalling JSON without quotes 2016-09-18 13:52:01 -07:00
Vadim Graboys
96e19b482b Merge branch 'tomlinford-master' 2016-09-18 13:32:48 -07:00
Chris Rivera
8879c91b35 Handle strings being passed to Scan()
lib/pq can now pass strings to Scan() as of:
e2402a7cd1
2016-08-03 16:03:49 -04:00
Roland Averkamp
b77bff862c Merge remote-tracking branch 'upstream/master' 2016-04-25 21:20:59 +02:00
Nathan VanBenschoten
ecd4a8353a Implement Modulus arithmetic function 2016-01-15 16:32:48 -05:00
Vadim Graboys
af95951b3f Merge pull request #15 from pwiecz/master
Add a fast track to d.Cmp(d2) when d.exp == d2.exp
2016-01-13 16:11:24 -05:00
Nathan VanBenschoten
eae6d13435 Prevent unnecessary int64 overflow in NewFromFloat 2016-01-13 13:27:32 -05:00
Tom Linford
54efccb61f Make Value take a pointer receiver 2015-12-23 17:00:06 -08:00
Piotr
cb949cead4 Add a fast track to d.Cmp(d2) when d.exp == d2.exp
This makes a noticeable difference when one is sorting a large slice
of decimals when most of them have the same precision, as it is saving
a lot of calls to rescale().
2015-12-11 23:54:57 +01:00
Florent AIDE
b873aa2b43 Return nil instead of empty err in Scan 2015-12-11 06:37:27 +01:00
Florent AIDE
c30673fb5f Use an idiomatic type switch for Scan type comparison 2015-12-11 06:34:52 +01:00
Florent AIDE
28bb8ff9f5 use directly the int64 instead of casting to float 2015-12-03 11:06:49 +01:00
Florent AIDE
9e9cba8a85 Better implementatin with switch and support for 0 2015-11-23 18:45:31 +01:00
Florent AIDE
c4b5af094a Added support for Numeric type in db storage 2015-11-23 16:43:59 +01:00
Roland Averkamp
696232de64 only formattimg, really! 2015-09-03 20:10:10 +02:00
Roland Averkamp
8b186db779 replaced original Div, added initialization check and and check for 0 in divide 2015-09-03 17:24:49 +02:00
Roland Averkamp
87964935d0 better method comments
use the godoc format for the method comments
2015-09-03 16:31:44 +02:00
Roland Averkamp
e4641fd8ba added divsion with rest and rounded division
Added a division based on integer division with rest.
A simple rounded division aded.
2015-09-01 14:50:25 +02:00
Vadim Graboys
9995dc92ee fix some small issues with scientific notation, add more tests 2015-07-31 16:22:14 -04:00
Thiago Arruda
632e313f4a Fix possible int64 overflow and remove unnecessary code 2015-07-31 13:36:54 -03:00
Thiago Arruda
3e7f1c747e Change exp to int64 to prevent overflow 2015-07-28 08:08:24 -03:00
Thiago Arruda
849f553b9d Add scientific notation parsing 2015-07-24 13:25:40 -03:00
Vadim Graboys
6da60a24bd update docs to make more clear 2015-07-24 07:40:22 -04:00
Vadim Graboys
96d9a5e02e add Min and Max functions 2015-07-24 07:17:36 -04:00
Vadim Graboys
6e97405099 add stupid test for extreme values, fix some super-edge-case bugs 2015-06-14 15:39:05 -04:00
Vadim Graboys
54dc68463b ensure decimal is initialized for new methods 2015-06-14 14:09:13 -04:00
Vadim Graboys
5359bc7cb4 add docs for Floor and Ceil 2015-06-14 13:10:35 -04:00
Vadim Graboys
0c74aee0c1 add Round, Floor, Ceil, and StringFixed. Deprecate StringScaled 2015-06-14 11:56:33 -04:00
Casey Marshall
d589a882a7 Simplify Equals and Cmp godoc comments. 2015-03-23 16:41:30 -05:00
Casey Marshall
605289b720 Updated godoc comments.
http://blog.golang.org/godoc-documenting-go-code
2015-03-23 11:09:19 -05:00
Vadim Graboys
892f011ab6 fix doc for Sub 2015-02-12 12:10:49 -05:00
Vadim Graboys
778765bb9d better documentation for godoc 2015-02-10 16:19:14 -05:00
Vadim Graboys
3bac4bd166 init 2015-02-10 15:33:58 -05:00