# floating-base-converter
[](https://www.python.org/downloads/)
[](LICENSE)
[](tests/)
[](htmlcov/)
[](#high-precision-arithmetic)
[](#scientific-notation-support)
High-performance floating-point number base conversion library supporting decimal, binary, octal, and hexadecimal number systems.
## Features
- **Zero dependencies** - Pure Python implementation
- **High precision** - Configurable fractional precision (1-100 digits)
- **Scientific notation** - Full support for exponential notation (e.g., `1.23e-4`)
- **Multiple interfaces** - Python API and CLI
- **Comprehensive validation** - Input validation with detailed error messages
- **Full test coverage** - 91% code coverage with extensive test suite
## Installation
```bash
pip install floating-base-converter
```
## API Reference
### BaseConverter
```python
from base_converter import BaseConverter
converter = BaseConverter(default_precision=10)
```
#### Core Methods
| Method | Description | Example |
|--------|-------------|---------|
| `decimal_to_binary(n, precision=None)` | Decimal → Binary | `3.14` → `"11.001000111101011100"` |
| `decimal_to_hex(n, precision=None)` | Decimal → Hexadecimal | `255.5` → `"FF.8"` |
| `binary_to_decimal(s, precision=None)` | Binary → Decimal | `"1010.01"` → `"10.25"` |
| `hex_to_decimal(s, precision=None)` | Hexadecimal → Decimal | `"A.8"` → `"10.5"` |
| `convert(n, from_base, to_base, precision=None)` | Universal converter | `("FF", 16, 2)` → `"11111111"` |
#### Input Types
- **Decimal**: `int`, `float`, or `str`
- **Non-decimal**: `str` only (e.g., `"1010.01"`, `"FF.8"`)
#### Scientific Notation Support
For decimal inputs, scientific notation is fully supported:
```python
converter = BaseConverter()
# Scientific notation examples
converter.decimal_to_hex("1.23e-4", precision=10) # → "0.00080F98FA"
converter.decimal_to_binary("6.626e-34", precision=50) # → "0.000..."
converter.decimal_to_octal("1e5") # → "303240"
# Both uppercase and lowercase 'e' supported
converter.decimal_to_hex("1.5E-3") # Same as "1.5e-3"
```
**Note**: Scientific notation is only supported for decimal (base 10) inputs.
#### Supported Prefixes
- Binary: `0b1010` or `1010`
- Octal: `0o17` or `17`
- Hexadecimal: `0xFF` or `FF`
### CLI Interface
```bash
base-converter <number> -f <from_base> -t <to_base> [-p <precision>]
```
#### Examples
```bash
# Decimal to hexadecimal
base-converter 3.14159 -f 10 -t 16 -p 6
# Output: 3.14159 (decimal) = 3.243F3E (hexadecimal)
# Binary to decimal
base-converter "1010.01" -f 2 -t 10
# Output: 1010.01 (binary) = 10.25 (decimal)
# Hexadecimal to binary
base-converter "FF.8" -f 16 -t 2 -p 4
# Output: FF.8 (hexadecimal) = 11111111.1 (binary)
```
### Error Handling
```python
from base_converter import ConversionError
try:
result = converter.binary_to_decimal("102") # Invalid binary digit
except ConversionError as e:
print(f"Error: {e}")
```
## Development
### Setup
```bash
git clone https://github.com/yeabwang/floating-base-converter.git
cd floating-base-converter
pip install -e ".[dev]"
```
### Testing
```bash
pytest # Run tests
pytest --cov=base_converter # With coverage
```
### Code Quality
```bash
black base_converter tests/ # Format code
flake8 base_converter tests/ # Lint code
mypy base_converter/ # Type checking
```
## Performance Benchmarks
### Precision vs Speed & Memory
| Precision | Avg Time (ms) | Memory (KB) | Accuracy | Use Case |
|-----------|---------------|-------------|----------|----------|
| 10 | 0.93 | 3.0 | 10 digits | General purpose, fastest |
| 25 | 1.52 | 3.0 | 25 digits | Financial calculations |
| 50 | 1.74 | 4.2 | 50 digits | Scientific computing |
| 75 | 2.98 | 5.6 | 75 digits | Research applications |
| 100 | 2.53 | 7.0 | 100 digits | Maximum precision |
### Cross-Base Conversion Performance
| Conversion | Time (ms) | Complexity | Notes |
|------------|-----------|------------|-------|
| Decimal → Hex | 0.37 | O(n) | Most efficient |
| Decimal → Binary | 0.43 | O(n) | Longest output |
| Decimal → Octal | 0.44 | O(n) | Base-8 conversion |
| Cross-conversions | 0.37-0.44 | O(n) | Via decimal intermediate |
### Scientific Notation Overhead
| Input Type | Avg Time (ms) | Overhead | Performance Impact |
|-------------------|---------------|----------|--------------------|
| Regular notation | 0.50 | Baseline | Standard performance |
| Scientific (e0) | 0.54 | +7.6% | Minimal overhead |
| Scientific (e+2) | 0.54 | +8.2% | Minimal overhead |
| Scientific (e-4) | 0.63 | +25.6% | Moderate overhead |
### Key Performance Insights
- **Linear precision scaling**: Performance scales predictably from 0.93ms (10 digits) to 2.53ms (100 digits) with 2.7x scaling factor
- **Memory scaling**: Memory usage scales with precision from 3.0KB (10 digits) to 7.0KB (100 digits)
- **Reasonable performance**: Individual conversions complete in under 3ms for most operations
- **Precision-focused design**: Prioritizes accuracy over raw speed for high-precision calculations
- **Scientific notation**: Generally low overhead (<10%) except for small numbers with negative exponents
## High Precision Arithmetic
The library uses Python's `decimal` module for arbitrary precision arithmetic, providing significant advantages over float-based implementations:
### Precision Capabilities
- **Range**: 1-100 fractional digits (doubled from previous 50-digit limit)
- **Accuracy**: True arbitrary precision, not limited by IEEE 754 float precision (~17 digits)
- **Memory Efficiency**: Benchmarks show progressive memory scaling from 3.0KB to 7.0KB
### Example: 80-digit precision π conversion
```python
from base_converter import BaseConverter
converter = BaseConverter()
pi_80_digits = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862"
# Convert to hexadecimal with 80 digits precision
hex_result = converter.decimal_to_hex(pi_80_digits, precision=80)
print(hex_result)
# Output: 3.243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C883A699724B1DAFA4F
```
### Performance Benefits
- **Accuracy**: True arbitrary precision, not limited by IEEE 754 float precision (~17 digits)
- **Memory**: Efficient memory usage with predictable scaling based on precision requirements
- **Scalability**: Maintains good performance even at 100+ digits with 2.7x scaling factor
- **Precision Focus**: Prioritizes accuracy over raw speed for high-precision calculations
## Algorithm Complexity
### Time Complexity
- **Overall**: `O(log n + p)` where `n` is input integer value, `p` is precision
- **Integer conversion**: `O(log n)` - logarithmic in input size
- **Fractional conversion**: `O(p)` - linear in requested precision
- **Scientific notation**: Minimal parsing overhead (7.6-25.6%) + `O(p)` conversion
### Space Complexity
- **Overall**: `O(p)` - dominated by precision requirements
- **Memory usage**: Scales linearly from 3.0KB (10 digits) to 7.0KB (100 digits)
- **Scalability**: Predictable memory growth with precision level
### Verified Performance Characteristics
- ✅ **Linear precision scaling**: 10 digits → 100 digits shows 2.7x performance scaling
- ✅ **Logarithmic input scaling**: Large integers show minimal performance impact
- ✅ **Linear memory scaling**: Memory usage grows predictably with precision (3.0KB → 7.0KB)
- ✅ **Scientific notation efficiency**: 7.6-25.6% overhead depending on exponent magnitude
## License
MIT License. See [LICENSE](LICENSE) for details.
## Technical Specifications
- **Python**: 3.8+
- **Dependencies**: None (runtime)
- **Precision**: 1-100 fractional digits
- **Supported bases**: 2 (binary), 8 (octal), 10 (decimal), 16 (hexadecimal)
- **Performance**: O(log n + p) conversion time, O(p) memory scaling
- **Test Coverage**: 91% with 30 passing unit tests
Raw data
{
"_id": null,
"home_page": null,
"name": "floating-base-converter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Yeabwang <wangxiayu@yeab.io>",
"keywords": "base conversion, floating point, binary, octal, hexadecimal, decimal, number systems",
"author": null,
"author_email": "Yeabwang <wangxiayu@yeab.io>",
"download_url": "https://files.pythonhosted.org/packages/0b/a2/5d3787c40929ff8ff26d6cce26d2bb9684ed6c6b963320e4a6dd80d6ee41/floating_base_converter-1.0.0.tar.gz",
"platform": null,
"description": "# floating-base-converter\r\n\r\n[](https://www.python.org/downloads/)\r\n[](LICENSE)\r\n[](tests/)\r\n[](htmlcov/)\r\n[](#high-precision-arithmetic)\r\n[](#scientific-notation-support)\r\n\r\nHigh-performance floating-point number base conversion library supporting decimal, binary, octal, and hexadecimal number systems.\r\n\r\n## Features\r\n\r\n- **Zero dependencies** - Pure Python implementation\r\n- **High precision** - Configurable fractional precision (1-100 digits)\r\n- **Scientific notation** - Full support for exponential notation (e.g., `1.23e-4`)\r\n- **Multiple interfaces** - Python API and CLI\r\n- **Comprehensive validation** - Input validation with detailed error messages\r\n- **Full test coverage** - 91% code coverage with extensive test suite\r\n\r\n## Installation\r\n\r\n```bash\r\npip install floating-base-converter\r\n```\r\n\r\n## API Reference\r\n\r\n### BaseConverter\r\n\r\n```python\r\nfrom base_converter import BaseConverter\r\n\r\nconverter = BaseConverter(default_precision=10)\r\n```\r\n\r\n#### Core Methods\r\n\r\n| Method | Description | Example |\r\n|--------|-------------|---------|\r\n| `decimal_to_binary(n, precision=None)` | Decimal \u2192 Binary | `3.14` \u2192 `\"11.001000111101011100\"` |\r\n| `decimal_to_hex(n, precision=None)` | Decimal \u2192 Hexadecimal | `255.5` \u2192 `\"FF.8\"` |\r\n| `binary_to_decimal(s, precision=None)` | Binary \u2192 Decimal | `\"1010.01\"` \u2192 `\"10.25\"` |\r\n| `hex_to_decimal(s, precision=None)` | Hexadecimal \u2192 Decimal | `\"A.8\"` \u2192 `\"10.5\"` |\r\n| `convert(n, from_base, to_base, precision=None)` | Universal converter | `(\"FF\", 16, 2)` \u2192 `\"11111111\"` |\r\n\r\n#### Input Types\r\n\r\n- **Decimal**: `int`, `float`, or `str`\r\n- **Non-decimal**: `str` only (e.g., `\"1010.01\"`, `\"FF.8\"`)\r\n\r\n#### Scientific Notation Support\r\n\r\nFor decimal inputs, scientific notation is fully supported:\r\n\r\n```python\r\nconverter = BaseConverter()\r\n\r\n# Scientific notation examples\r\nconverter.decimal_to_hex(\"1.23e-4\", precision=10) # \u2192 \"0.00080F98FA\"\r\nconverter.decimal_to_binary(\"6.626e-34\", precision=50) # \u2192 \"0.000...\"\r\nconverter.decimal_to_octal(\"1e5\") # \u2192 \"303240\"\r\n\r\n# Both uppercase and lowercase 'e' supported\r\nconverter.decimal_to_hex(\"1.5E-3\") # Same as \"1.5e-3\"\r\n```\r\n\r\n**Note**: Scientific notation is only supported for decimal (base 10) inputs.\r\n\r\n#### Supported Prefixes\r\n\r\n- Binary: `0b1010` or `1010`\r\n- Octal: `0o17` or `17` \r\n- Hexadecimal: `0xFF` or `FF`\r\n\r\n### CLI Interface\r\n\r\n```bash\r\nbase-converter <number> -f <from_base> -t <to_base> [-p <precision>]\r\n```\r\n\r\n#### Examples\r\n\r\n```bash\r\n# Decimal to hexadecimal\r\nbase-converter 3.14159 -f 10 -t 16 -p 6\r\n# Output: 3.14159 (decimal) = 3.243F3E (hexadecimal)\r\n\r\n# Binary to decimal \r\nbase-converter \"1010.01\" -f 2 -t 10\r\n# Output: 1010.01 (binary) = 10.25 (decimal)\r\n\r\n# Hexadecimal to binary\r\nbase-converter \"FF.8\" -f 16 -t 2 -p 4\r\n# Output: FF.8 (hexadecimal) = 11111111.1 (binary)\r\n```\r\n\r\n### Error Handling\r\n\r\n```python\r\nfrom base_converter import ConversionError\r\n\r\ntry:\r\n result = converter.binary_to_decimal(\"102\") # Invalid binary digit\r\nexcept ConversionError as e:\r\n print(f\"Error: {e}\")\r\n```\r\n\r\n## Development\r\n\r\n### Setup\r\n\r\n```bash\r\ngit clone https://github.com/yeabwang/floating-base-converter.git\r\ncd floating-base-converter\r\npip install -e \".[dev]\"\r\n```\r\n\r\n### Testing\r\n\r\n```bash\r\npytest # Run tests\r\npytest --cov=base_converter # With coverage\r\n```\r\n\r\n### Code Quality\r\n\r\n```bash\r\nblack base_converter tests/ # Format code\r\nflake8 base_converter tests/ # Lint code \r\nmypy base_converter/ # Type checking\r\n```\r\n\r\n## Performance Benchmarks\r\n\r\n### Precision vs Speed & Memory\r\n\r\n| Precision | Avg Time (ms) | Memory (KB) | Accuracy | Use Case |\r\n|-----------|---------------|-------------|----------|----------|\r\n| 10 | 0.93 | 3.0 | 10 digits | General purpose, fastest |\r\n| 25 | 1.52 | 3.0 | 25 digits | Financial calculations |\r\n| 50 | 1.74 | 4.2 | 50 digits | Scientific computing |\r\n| 75 | 2.98 | 5.6 | 75 digits | Research applications |\r\n| 100 | 2.53 | 7.0 | 100 digits | Maximum precision |\r\n\r\n### Cross-Base Conversion Performance\r\n\r\n| Conversion | Time (ms) | Complexity | Notes |\r\n|------------|-----------|------------|-------|\r\n| Decimal \u2192 Hex | 0.37 | O(n) | Most efficient |\r\n| Decimal \u2192 Binary | 0.43 | O(n) | Longest output |\r\n| Decimal \u2192 Octal | 0.44 | O(n) | Base-8 conversion |\r\n| Cross-conversions | 0.37-0.44 | O(n) | Via decimal intermediate |\r\n\r\n### Scientific Notation Overhead\r\n\r\n| Input Type | Avg Time (ms) | Overhead | Performance Impact |\r\n|-------------------|---------------|----------|--------------------|\r\n| Regular notation | 0.50 | Baseline | Standard performance |\r\n| Scientific (e0) | 0.54 | +7.6% | Minimal overhead |\r\n| Scientific (e+2) | 0.54 | +8.2% | Minimal overhead |\r\n| Scientific (e-4) | 0.63 | +25.6% | Moderate overhead |\r\n\r\n### Key Performance Insights\r\n\r\n- **Linear precision scaling**: Performance scales predictably from 0.93ms (10 digits) to 2.53ms (100 digits) with 2.7x scaling factor\r\n- **Memory scaling**: Memory usage scales with precision from 3.0KB (10 digits) to 7.0KB (100 digits)\r\n- **Reasonable performance**: Individual conversions complete in under 3ms for most operations\r\n- **Precision-focused design**: Prioritizes accuracy over raw speed for high-precision calculations\r\n- **Scientific notation**: Generally low overhead (<10%) except for small numbers with negative exponents\r\n\r\n## High Precision Arithmetic\r\n\r\nThe library uses Python's `decimal` module for arbitrary precision arithmetic, providing significant advantages over float-based implementations:\r\n\r\n### Precision Capabilities\r\n- **Range**: 1-100 fractional digits (doubled from previous 50-digit limit)\r\n- **Accuracy**: True arbitrary precision, not limited by IEEE 754 float precision (~17 digits)\r\n- **Memory Efficiency**: Benchmarks show progressive memory scaling from 3.0KB to 7.0KB\r\n\r\n### Example: 80-digit precision \u03c0 conversion\r\n```python\r\nfrom base_converter import BaseConverter\r\n\r\nconverter = BaseConverter()\r\npi_80_digits = \"3.1415926535897932384626433832795028841971693993751058209749445923078164062862\"\r\n\r\n# Convert to hexadecimal with 80 digits precision\r\nhex_result = converter.decimal_to_hex(pi_80_digits, precision=80)\r\nprint(hex_result)\r\n# Output: 3.243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C883A699724B1DAFA4F\r\n```\r\n\r\n### Performance Benefits\r\n- **Accuracy**: True arbitrary precision, not limited by IEEE 754 float precision (~17 digits)\r\n- **Memory**: Efficient memory usage with predictable scaling based on precision requirements\r\n- **Scalability**: Maintains good performance even at 100+ digits with 2.7x scaling factor\r\n- **Precision Focus**: Prioritizes accuracy over raw speed for high-precision calculations\r\n\r\n## Algorithm Complexity\r\n\r\n### Time Complexity\r\n- **Overall**: `O(log n + p)` where `n` is input integer value, `p` is precision\r\n- **Integer conversion**: `O(log n)` - logarithmic in input size\r\n- **Fractional conversion**: `O(p)` - linear in requested precision\r\n- **Scientific notation**: Minimal parsing overhead (7.6-25.6%) + `O(p)` conversion\r\n\r\n### Space Complexity\r\n- **Overall**: `O(p)` - dominated by precision requirements\r\n- **Memory usage**: Scales linearly from 3.0KB (10 digits) to 7.0KB (100 digits)\r\n- **Scalability**: Predictable memory growth with precision level\r\n\r\n### Verified Performance Characteristics\r\n- \u2705 **Linear precision scaling**: 10 digits \u2192 100 digits shows 2.7x performance scaling\r\n- \u2705 **Logarithmic input scaling**: Large integers show minimal performance impact \r\n- \u2705 **Linear memory scaling**: Memory usage grows predictably with precision (3.0KB \u2192 7.0KB)\r\n- \u2705 **Scientific notation efficiency**: 7.6-25.6% overhead depending on exponent magnitude\r\n\r\n## License\r\n\r\nMIT License. See [LICENSE](LICENSE) for details.\r\n\r\n## Technical Specifications\r\n\r\n- **Python**: 3.8+\r\n- **Dependencies**: None (runtime)\r\n- **Precision**: 1-100 fractional digits\r\n- **Supported bases**: 2 (binary), 8 (octal), 10 (decimal), 16 (hexadecimal)\r\n- **Performance**: O(log n + p) conversion time, O(p) memory scaling\r\n- **Test Coverage**: 91% with 30 passing unit tests\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A high-precision Python package for converting floating-point numbers between different bases with scientific notation support",
"version": "1.0.0",
"project_urls": {
"Bug Tracker": "https://github.com/yeabwang/floating-base-converter/issues",
"Changelog": "https://github.com/yeabwang/floating-base-converter/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/yeabwang/floating-base-converter#readme",
"Homepage": "https://github.com/yeabwang/floating-base-converter",
"Repository": "https://github.com/yeabwang/floating-base-converter"
},
"split_keywords": [
"base conversion",
" floating point",
" binary",
" octal",
" hexadecimal",
" decimal",
" number systems"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "230f1d24577c367aeb1f46b0e01d7726752d3664dd4d669232481d312607377f",
"md5": "5406efa73d8aea1c89c22eb86bdaa5da",
"sha256": "cf2582da59509db6e5a5946870ec02981c24246a5e2a6dea4583cba51c317440"
},
"downloads": -1,
"filename": "floating_base_converter-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5406efa73d8aea1c89c22eb86bdaa5da",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 10665,
"upload_time": "2025-08-06T01:59:15",
"upload_time_iso_8601": "2025-08-06T01:59:15.626956Z",
"url": "https://files.pythonhosted.org/packages/23/0f/1d24577c367aeb1f46b0e01d7726752d3664dd4d669232481d312607377f/floating_base_converter-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ba25d3787c40929ff8ff26d6cce26d2bb9684ed6c6b963320e4a6dd80d6ee41",
"md5": "d496324013db57b4bd66c4b13c7bc2b8",
"sha256": "f2959e04cee7d97f1fc60ed224943a9f17af352210e008fcb19cfc65182f136a"
},
"downloads": -1,
"filename": "floating_base_converter-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "d496324013db57b4bd66c4b13c7bc2b8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 17376,
"upload_time": "2025-08-06T01:59:17",
"upload_time_iso_8601": "2025-08-06T01:59:17.269578Z",
"url": "https://files.pythonhosted.org/packages/0b/a2/5d3787c40929ff8ff26d6cce26d2bb9684ed6c6b963320e4a6dd80d6ee41/floating_base_converter-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-06 01:59:17",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yeabwang",
"github_project": "floating-base-converter",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "floating-base-converter"
}