Base class for any class which admits different numerical representations. Instances of this class must always be constructed with either
When subclassing NumberTypeable, there is no need to explicitely call NumberTypeable.__init__(self) in your constructor—the NumberTypeable constructor is always called automatically, and looks for the argument as described above.
Parameters: |
|
---|
>>> x = cdd.NumberTypeable(number_type='float')
>>> x.number_type
'float'
>>> y = cdd.NumberTypeable(number_type='fraction')
>>> y.number_type
'fraction'
>>> # hyperreals are not supported :-)
>>> cdd.NumberTypeable('hyperreal')
Traceback (most recent call last):
...
ValueError: ...
>>> z = cdd.NumberTypeable(x)
>>> z.number_type
'float'
Convert value into a number.
Parameters: |
|
---|---|
Returns: | The converted value. |
Return type: |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable(number_type='float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(repr(x))
4.0
0.66666666666666663
1.6000000000000001
-1.5
1.1200000000000001
>>> nt = cdd.NumberTypeable(number_type='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: |
|
---|---|
Returns: | A string for the value. |
Return type: | str |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable(number_type='float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_str(x))
4.0
0.666666666667
1.6
-1.5
1.12
>>> nt = cdd.NumberTypeable(number_type='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: |
|
---|---|
Returns: | A string for the value. |
Return type: | str |
>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable(number_type='float')
>>> for number in numbers:
... x = nt.make_number(number)
... print(nt.number_repr(x))
4.0
0.66666666666666663
1.6000000000000001
-1.5
1.1200000000000001
>>> nt = cdd.NumberTypeable(number_type='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(number_type='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(number_type='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').number_type
'float'
>>> cdd.NumberTypeable(number_type='fraction').number_type
'fraction'
The number type as class.
>>> cdd.NumberTypeable(number_type='float').NumberType
<type 'float'>
>>> cdd.NumberTypeable(number_type='fraction').NumberType
<class 'fractions.Fraction'>