Skip to content

DecimalValue ​

任意の小数値を扱う値オブジェクトです。BCMath を使用した高精度計算をサポートします。

名前空間 ​

php
EndouMame\PhpValueObject\Number\DecimalValue

継承関係 ​

DecimalValueBase
└── DecimalValue

実装インターフェース ​

  • IValueObject
  • Stringable
  • JsonSerializable
  • IArithmetic
  • IComparison
  • IDecimalValueFactory

プロパティ ​

value ​

php
public readonly \BcMath\Number $value

BCMath の Number オブジェクトを保持します。

オーバーライド可能なメソッド ​

継承クラスで以下をオーバーライドしてカスタマイズできます。

メソッドデフォルト値説明
min()なし最小値
max()なし最大値
scale()なし小数点以下の桁数

ファクトリメソッド ​

from ​

php
public static function from(\BcMath\Number $value): static

BcMath\Number からインスタンスを作成します。

php
use BcMath\Number;

$decimal = DecimalValue::from(new Number("3.14159"));

tryFrom ​

php
public static function tryFrom(\BcMath\Number $value): Result<static, ValueObjectError>

検証付きでインスタンスを作成します。

php
use BcMath\Number;

$result = DecimalValue::tryFrom(new Number("3.14159"));
if ($result->isOk()) {
    $decimal = $result->unwrap();
}

fromNullable ​

php
public static function fromNullable(?\BcMath\Number $value): Option<static>

null 許容でインスタンスを作成します。

zero ​

php
public static function zero(): static

0 のインスタンスを作成します。

状態確認メソッド ​

isZero ​

php
public function isZero(): bool

値が 0 かどうかを判定します。

isPositive ​

php
public function isPositive(): bool

値が正かどうかを判定します。

isNegative ​

php
public function isNegative(): bool

値が負かどうかを判定します。

算術演算メソッド ​

すべての算術演算メソッドは新しいインスタンスを返します。

add / tryAdd ​

php
public function add(self $other): static
public function tryAdd(self $other): Result<static, ValueObjectError>

加算します。

php
use BcMath\Number;

$a = DecimalValue::from(new Number("10.5"));
$b = DecimalValue::from(new Number("5.3"));
$sum = $a->add($b); // 15.8

sub / trySub ​

php
public function sub(self $other): static
public function trySub(self $other): Result<static, ValueObjectError>

減算します。

mul / tryMul ​

php
public function mul(self $other): static
public function tryMul(self $other): Result<static, ValueObjectError>

乗算します。

div / tryDiv ​

php
public function div(self $other): static
public function tryDiv(self $other): Result<static, ValueObjectError>

除算します。ゼロ除算はエラーになります。

比較メソッド ​

gt / gte / lt / lte ​

IntegerValue と同様の比較メソッドを持ちます。

equals ​

php
public function equals(IValueObject $other): bool

等価かどうかを判定します。

カスタマイズ例 ​

価格 ​

php
use Override;
use EndouMame\PhpValueObject\Number\Decimal\DecimalValue;
use EndouMame\PhpValueObject\ValueObjectMeta;
use BcMath\Number;

#[ValueObjectMeta(name: '価格')]
final readonly class Price extends DecimalValue
{
    #[Override]
    public static function scale(): int
    {
        return 2; // 小数点以下2桁
    }

    public function withTax(float $taxRate = 0.1): self
    {
        $taxMultiplier = new Number(strval(1 + $taxRate));
        return self::from($this->value * $taxMultiplier);
    }
}

関連 ​

MIT ライセンスの下で公開されています。