https://github.com/spryker/decimal-object
Decimal handling as value object instead of plain strings.
https://github.com/spryker/decimal-object
php
Last synced: 15 days ago
JSON representation
Decimal handling as value object instead of plain strings.
- Host: GitHub
- URL: https://github.com/spryker/decimal-object
- Owner: spryker
- License: mit
- Created: 2019-08-13T11:49:09.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-10-07T19:15:11.000Z (6 months ago)
- Last Synced: 2025-03-29T07:07:50.463Z (22 days ago)
- Topics: php
- Language: PHP
- Homepage: https://spryker.com
- Size: 82 KB
- Stars: 22
- Watchers: 62
- Forks: 8
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-php-cn - DecimalObject - 一个值对象来处理小数/浮动容易和更准确. (目录 / 数字 Numbers)
- awesome-projects - DecimalObject - A value object to handle decimals/floats easily and more precisely. (PHP / Numbers)
README
# Decimal Object
[](https://github.com/spryker/decimal-object/actions?query=workflow%3ACI+branch%3Amaster)
[](https://codecov.io/gh/spryker/decimal-object)
[](https://packagist.org/packages/spryker/decimal-object)
[](https://php.net/)
[](https://phpstan.org/)
[](https://packagist.org/packages/spryker/decimal-object)Decimal value object for PHP.
## Background
When working with monetary values, normal data types like int or float are not suitable for exact arithmetic.
Try out the following in PHP:
```php
var_dump(0.1 + 0.2); // float(0.3)
var_dump(0.1 + 0.2 - 0.3); // float(5.5511151231258E-17)
```Handling them as string is a workaround, but as value object you can more easily encapsulate some of the logic.
### Alternatives
Solutions like https://php-decimal.io require a PHP extension (would make it faster, but also more difficult for some
servers to be available). For details see the [wiki](https://github.com/spryker/decimal-object/wiki).## Features
- Super strict on precision/scale. Does not lose significant digits on its own. You need to `trim()` for this manually.
- Speaking API (no le, gt methods).
- Basic math operations and checks supported.
- Immutability.
- Handle very large and very small numbers.## Installation
### Requirements
- `bcmath` PHP extension enabled
### Composer (preferred)
```
composer require spryker/decimal-object
```## Usage
See [Documentation](/docs) for more details.
### Implementations
The following libraries are using the `Decimal` value object:- [dereuromark/cakephp-decimal](https://github.com/dereuromark/cakephp-decimal) as decimal type replacement for CakePHP ORM.