<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/type/decimal.proto

namespace Google\Type;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\GPBUtil;
use Google\Protobuf\RepeatedField;

/**
 * A representation of a decimal value, such as 2.5. Clients may convert values
 * into language-native decimal formats, such as Java's
 * [BigDecimal](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html)
 * or Python's
 * [decimal.Decimal](https://docs.python.org/3/library/decimal.html).
 *
 * Generated from protobuf message <code>google.type.Decimal</code>
 */
class Decimal extends \Google\Protobuf\Internal\Message
{
    /**
     * The decimal value, as a string.
     * The string representation consists of an optional sign, `+` (`U+002B`)
     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
     * ("the integer"), optionally followed by a fraction, optionally followed
     * by an exponent. An empty string **should** be interpreted as `0`.
     * The fraction consists of a decimal point followed by zero or more decimal
     * digits. The string must contain at least one digit in either the integer
     * or the fraction. The number formed by the sign, the integer and the
     * fraction is referred to as the significand.
     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
     * followed by one or more decimal digits.
     * Services **should** normalize decimal values before storing them by:
     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
     *   - Coercing the exponent character to upper-case, with explicit sign
     *     (`2.5e8` -> `2.5E+8`).
     *   - Removing an explicitly-provided zero exponent (`2.5E0` -> `2.5`).
     * Services **may** perform additional normalization based on its own needs
     * and the internal decimal implementation selected, such as shifting the
     * decimal point and exponent value together (example: `2.5E-1` <-> `0.25`).
     * Additionally, services **may** preserve trailing zeroes in the fraction
     * to indicate increased precision, but are not required to do so.
     * Note that only the `.` character is supported to divide the integer
     * and the fraction; `,` **should not** be supported regardless of locale.
     * Additionally, thousand separators **should not** be supported. If a
     * service does support them, values **must** be normalized.
     * The ENBF grammar is:
     *     DecimalString =
     *       '' | [Sign] Significand [Exponent];
     *     Sign = '+' | '-';
     *     Significand =
     *       Digits ['.'] [Digits] | [Digits] '.' Digits;
     *     Exponent = ('e' | 'E') [Sign] Digits;
     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };
     * Services **should** clearly document the range of supported values, the
     * maximum supported precision (total number of digits), and, if applicable,
     * the scale (number of digits after the decimal point), as well as how it
     * behaves when receiving out-of-bounds values.
     * Services **may** choose to accept values passed as input even when the
     * value has a higher precision or scale than the service supports, and
     * **should** round the value to fit the supported scale. Alternatively, the
     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
     * if precision would be lost.
     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
     * gRPC) if the service receives a value outside of the supported range.
     *
     * Generated from protobuf field <code>string value = 1;</code>
     */
    protected $value = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $value
     *           The decimal value, as a string.
     *           The string representation consists of an optional sign, `+` (`U+002B`)
     *           or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
     *           ("the integer"), optionally followed by a fraction, optionally followed
     *           by an exponent. An empty string **should** be interpreted as `0`.
     *           The fraction consists of a decimal point followed by zero or more decimal
     *           digits. The string must contain at least one digit in either the integer
     *           or the fraction. The number formed by the sign, the integer and the
     *           fraction is referred to as the significand.
     *           The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
     *           followed by one or more decimal digits.
     *           Services **should** normalize decimal values before storing them by:
     *             - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
     *             - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
     *             - Coercing the exponent character to upper-case, with explicit sign
     *               (`2.5e8` -> `2.5E+8`).
     *             - Removing an explicitly-provided zero exponent (`2.5E0` -> `2.5`).
     *           Services **may** perform additional normalization based on its own needs
     *           and the internal decimal implementation selected, such as shifting the
     *           decimal point and exponent value together (example: `2.5E-1` <-> `0.25`).
     *           Additionally, services **may** preserve trailing zeroes in the fraction
     *           to indicate increased precision, but are not required to do so.
     *           Note that only the `.` character is supported to divide the integer
     *           and the fraction; `,` **should not** be supported regardless of locale.
     *           Additionally, thousand separators **should not** be supported. If a
     *           service does support them, values **must** be normalized.
     *           The ENBF grammar is:
     *               DecimalString =
     *                 '' | [Sign] Significand [Exponent];
     *               Sign = '+' | '-';
     *               Significand =
     *                 Digits ['.'] [Digits] | [Digits] '.' Digits;
     *               Exponent = ('e' | 'E') [Sign] Digits;
     *               Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };
     *           Services **should** clearly document the range of supported values, the
     *           maximum supported precision (total number of digits), and, if applicable,
     *           the scale (number of digits after the decimal point), as well as how it
     *           behaves when receiving out-of-bounds values.
     *           Services **may** choose to accept values passed as input even when the
     *           value has a higher precision or scale than the service supports, and
     *           **should** round the value to fit the supported scale. Alternatively, the
     *           service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
     *           if precision would be lost.
     *           Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
     *           gRPC) if the service receives a value outside of the supported range.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Type\Decimal::initOnce();
        parent::__construct($data);
    }

    /**
     * The decimal value, as a string.
     * The string representation consists of an optional sign, `+` (`U+002B`)
     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
     * ("the integer"), optionally followed by a fraction, optionally followed
     * by an exponent. An empty string **should** be interpreted as `0`.
     * The fraction consists of a decimal point followed by zero or more decimal
     * digits. The string must contain at least one digit in either the integer
     * or the fraction. The number formed by the sign, the integer and the
     * fraction is referred to as the significand.
     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
     * followed by one or more decimal digits.
     * Services **should** normalize decimal values before storing them by:
     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
     *   - Coercing the exponent character to upper-case, with explicit sign
     *     (`2.5e8` -> `2.5E+8`).
     *   - Removing an explicitly-provided zero exponent (`2.5E0` -> `2.5`).
     * Services **may** perform additional normalization based on its own needs
     * and the internal decimal implementation selected, such as shifting the
     * decimal point and exponent value together (example: `2.5E-1` <-> `0.25`).
     * Additionally, services **may** preserve trailing zeroes in the fraction
     * to indicate increased precision, but are not required to do so.
     * Note that only the `.` character is supported to divide the integer
     * and the fraction; `,` **should not** be supported regardless of locale.
     * Additionally, thousand separators **should not** be supported. If a
     * service does support them, values **must** be normalized.
     * The ENBF grammar is:
     *     DecimalString =
     *       '' | [Sign] Significand [Exponent];
     *     Sign = '+' | '-';
     *     Significand =
     *       Digits ['.'] [Digits] | [Digits] '.' Digits;
     *     Exponent = ('e' | 'E') [Sign] Digits;
     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };
     * Services **should** clearly document the range of supported values, the
     * maximum supported precision (total number of digits), and, if applicable,
     * the scale (number of digits after the decimal point), as well as how it
     * behaves when receiving out-of-bounds values.
     * Services **may** choose to accept values passed as input even when the
     * value has a higher precision or scale than the service supports, and
     * **should** round the value to fit the supported scale. Alternatively, the
     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
     * if precision would be lost.
     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
     * gRPC) if the service receives a value outside of the supported range.
     *
     * Generated from protobuf field <code>string value = 1;</code>
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * The decimal value, as a string.
     * The string representation consists of an optional sign, `+` (`U+002B`)
     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
     * ("the integer"), optionally followed by a fraction, optionally followed
     * by an exponent. An empty string **should** be interpreted as `0`.
     * The fraction consists of a decimal point followed by zero or more decimal
     * digits. The string must contain at least one digit in either the integer
     * or the fraction. The number formed by the sign, the integer and the
     * fraction is referred to as the significand.
     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
     * followed by one or more decimal digits.
     * Services **should** normalize decimal values before storing them by:
     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
     *   - Coercing the exponent character to upper-case, with explicit sign
     *     (`2.5e8` -> `2.5E+8`).
     *   - Removing an explicitly-provided zero exponent (`2.5E0` -> `2.5`).
     * Services **may** perform additional normalization based on its own needs
     * and the internal decimal implementation selected, such as shifting the
     * decimal point and exponent value together (example: `2.5E-1` <-> `0.25`).
     * Additionally, services **may** preserve trailing zeroes in the fraction
     * to indicate increased precision, but are not required to do so.
     * Note that only the `.` character is supported to divide the integer
     * and the fraction; `,` **should not** be supported regardless of locale.
     * Additionally, thousand separators **should not** be supported. If a
     * service does support them, values **must** be normalized.
     * The ENBF grammar is:
     *     DecimalString =
     *       '' | [Sign] Significand [Exponent];
     *     Sign = '+' | '-';
     *     Significand =
     *       Digits ['.'] [Digits] | [Digits] '.' Digits;
     *     Exponent = ('e' | 'E') [Sign] Digits;
     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };
     * Services **should** clearly document the range of supported values, the
     * maximum supported precision (total number of digits), and, if applicable,
     * the scale (number of digits after the decimal point), as well as how it
     * behaves when receiving out-of-bounds values.
     * Services **may** choose to accept values passed as input even when the
     * value has a higher precision or scale than the service supports, and
     * **should** round the value to fit the supported scale. Alternatively, the
     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
     * if precision would be lost.
     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
     * gRPC) if the service receives a value outside of the supported range.
     *
     * Generated from protobuf field <code>string value = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setValue($var)
    {
        GPBUtil::checkString($var, True);
        $this->value = $var;

        return $this;
    }

}

