Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/spryker/decimal-object
Decimal handling as value object instead of plain strings.
https://github.com/spryker/decimal-object
php
Last synced: 29 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 (2 months ago)
- Last Synced: 2024-11-01T23:46:57.119Z (about 1 month ago)
- Topics: php
- Language: PHP
- Homepage: https://spryker.com
- Size: 82 KB
- Stars: 22
- Watchers: 65
- Forks: 9
- 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
[![Build Status](https://github.com/spryker/decimal-object/workflows/CI/badge.svg?branch=master)](https://github.com/spryker/decimal-object/actions?query=workflow%3ACI+branch%3Amaster)
[![codecov](https://codecov.io/gh/spryker/decimal-object/branch/master/graph/badge.svg?token=L1thFB9nOG)](https://codecov.io/gh/spryker/decimal-object)
[![Latest Stable Version](https://poser.pugx.org/spryker/decimal-object/v/stable.svg)](https://packagist.org/packages/spryker/decimal-object)
[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.0-8892BF.svg)](https://php.net/)
[![PHPStan](https://img.shields.io/badge/PHPStan-level%208-brightgreen.svg?style=flat)](https://phpstan.org/)
[![License](https://poser.pugx.org/spryker/decimal-object/license)](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.