Determine number type from a value.
Returns: | 'fraction' if the value is Fraction or str, otherwise 'float'. |
---|---|
Return type: | str |
Determine number type from sequences.
Returns: | 'fraction' if all elements are Fraction or str, otherwise 'float'. |
---|---|
Return type: | str |
Base class for any class which admits different numerical representations.
Parameters: | number_type (str) – The number type ('float' or 'fraction'). |
---|
>>> x = cdd.NumberTypeable()
>>> x.number_type
'float'
>>> x = cdd.NumberTypeable('float')
>>> x.number_type
'float'
>>> y = cdd.NumberTypeable('fraction')
>>> y.number_type
'fraction'
>>> # hyperreals are not supported :-)
>>> cdd.NumberTypeable('hyperreal')
Traceback (most recent call last):
...
ValueError: ...
Convert value into a number.
Parameters: | value (int, float, or str) – The value to convert. |
---|---|
Returns: | The converted value. |
Return type: | NumberType |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable('float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(repr(x))
4.0
0.6666666666666666
1.6
-1.5
1.12
>>> nt = cdd.NumberTypeable('fraction')
>>> for number in numbers:
... x = nt.make_number(number)
... print(repr(x))
Fraction(4, 1)
Fraction(2, 3)
Fraction(8, 5)
Fraction(-3, 2)
Fraction(1261007895663739, 1125899906842624)
Convert value into a string.
Parameters: | value (NumberType) – The value. |
---|---|
Returns: | A string for the value. |
Return type: | str |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable('float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_str(x))
4.0
0.6666666666666666
1.6
-1.5
1.12
>>> nt = cdd.NumberTypeable('fraction')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_str(x))
4
2/3
8/5
-3/2
1261007895663739/1125899906842624
Return representation string for value.
Parameters: | value (NumberType) – The value. |
---|---|
Returns: | A string for the value. |
Return type: | str |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable('float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_repr(x))
4.0
0.6666666666666666
1.6
-1.5
1.12
>>> nt = cdd.NumberTypeable('fraction')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_repr(x))
4
'2/3'
'8/5'
'-3/2'
'1261007895663739/1125899906842624'
Compare values. Type checking may not be performed, for speed. If num2 is not specified, then num1 is compared against zero.
Parameters: |
|
---|
>>> a = cdd.NumberTypeable('float')
>>> a.number_cmp(0.0, 5.0)
-1
>>> a.number_cmp(5.0, 0.0)
1
>>> a.number_cmp(5.0, 5.0)
0
>>> a.number_cmp(1e-30)
0
>>> a = cdd.NumberTypeable('fraction')
>>> a.number_cmp(0, 1)
-1
>>> a.number_cmp(1, 0)
1
>>> a.number_cmp(0, 0)
0
>>> a.number_cmp(a.make_number(1e-30))
1
The number type as string.
>>> cdd.NumberTypeable().number_type
'float'
>>> cdd.NumberTypeable('float').number_type
'float'
>>> cdd.NumberTypeable('fraction').number_type
'fraction'
The number type as class.
>>> cdd.NumberTypeable().NumberType
<class 'float'>
>>> cdd.NumberTypeable('float').NumberType
<class 'float'>
>>> cdd.NumberTypeable('fraction').NumberType
<class 'fractions.Fraction'>