PLANCK_CONSTANT_JS = 6.62607015e-34  # Planck's constant in Joule-seconds
PLANCK_CONSTANT_EVS = 4.135667696e-15  # Planck's constant in eV-seconds

def de_broglie_wavelength(momentum: float, in_ev: bool = False) -> str:
    """
    Calculates the de Broglie wavelength of a particle using the given momentum.

    Parameters:
        momentum (float): Momentum of the particle.
        in_ev (bool, optional): True if momentum is in eV·s.
                                If False, momentum is in kg·m/s.

    Returns:
        str: The calculated de Broglie wavelength of the particle in meters,
        formatted in scientific notation.

    Raises:
        ValueError: If the momentum is zero or negative.

    Usage example:
    >>> de_broglie_wavelength(1e-24)
    '6.62607015e-10'
    >>> de_broglie_wavelength(1e-24, True)
    '4.13566770e+09'
    >>> de_broglie_wavelength(0)
    Traceback (most recent call last):
        ...
    ValueError: Momentum can't be zero or negative.
    >>> de_broglie_wavelength(-1e-24)
    Traceback (most recent call last):
        ...
    ValueError: Momentum can't be zero or negative.
    >>> de_broglie_wavelength(5e-20)
    '1.32521403e-14'
    """

    if momentum <= 0:
        raise ValueError("Momentum can't be zero or negative.")


    wavelength = PLANCK_CONSTANT_EVS / momentum if in_ev else PLANCK_CONSTANT_JS / momentum
    return f"{wavelength:.8e}"

if __name__ == "__main__":
    import doctest
    doctest.testmod()
