stack_wallet/lib/utilities/amount.dart

44 lines
1.4 KiB
Dart
Raw Normal View History

2023-03-24 17:08:02 +00:00
import 'package:decimal/decimal.dart';
final _ten = BigInt.from(10);
class Amount {
Amount({
required BigInt rawValue,
required this.fractionDigits,
}) : assert(fractionDigits >= 0),
_value = rawValue;
/// truncate double value to [fractionDigits] places
Amount.fromDouble(double amount, {required this.fractionDigits})
: assert(fractionDigits >= 0),
_value =
Decimal.parse(amount.toString()).shift(fractionDigits).toBigInt();
/// truncate decimal value to [fractionDigits] places
Amount.fromDecimal(Decimal amount, {required this.fractionDigits})
: assert(fractionDigits >= 0),
_value = amount.shift(fractionDigits).toBigInt();
// ===========================================================================
// ======= Instance properties ===============================================
final int fractionDigits;
final BigInt _value;
// ===========================================================================
// ======= Getters ===========================================================
/// raw base value
BigInt get raw => _value;
/// actual decimal vale represented
Decimal get decimal =>
(Decimal.fromBigInt(_value) / _ten.pow(fractionDigits).toDecimal())
.toDecimal(scaleOnInfinitePrecision: fractionDigits);
/// convenience getter
@Deprecated("provided for convenience only. Use fractionDigits instead.")
int get decimals => fractionDigits;
}