45 stable releases
| 3.1.1 | Oct 19, 2025 |
|---|---|
| 3.0.19 | Oct 19, 2025 |
| 2.2.1 | Dec 16, 2019 |
| 2.1.18 | Jul 11, 2019 |
| 2.1.7 | May 31, 2019 |
#186 in Command line utilities
200KB
5K
SLoC
dntk
dntk is command line's multi-platform Interactive calculator with bc-compatible syntax and high-precision arithmetic.

✔︎ dntk means calculator in a japanese.
✔︎ dntk is bc-compatible calculator with bc-style configurable precision powered by dashu-decimal (no external bc required!)
✔︎ dntk syntax is compatible with GNU bc. learn syntax more
✔︎ dntk is a NATIVE The Rust Programming Language application.
✔︎ dntk can move cursor, can delete char, can refresh buffer.
✔︎ dntk provides accurate decimal arithmetic without floating-point errors.
Current dntk's version:v3.1.1
Download Page: https://github.com/nnao45/dntk/releases/latest
✨ Key Features
🎯 High-Precision Arithmetic
- Powered by
dashu-decimalfor arbitrary-precision decimals with predictable bc semantics - Configurable scale (default 20 fractional digits) with faithful truncation just like GNU bc
- No floating-point errors:
1 + 0.7 = 1.7(not 1.69999...) - Accurate division:
1/3 = .33333333333333333333
⚡ Fast & Lightweight
- No external dependencies (bc command not required!)
- Pure Rust implementation for maximum performance
- Optimized expression evaluation with
fasteval+dashu-decimal
🌍 True Cross-Platform
- Works out of the box on Windows, Linux, macOS, and FreeBSD
- No need to install bc.exe on Windows anymore!
- Single binary, easy deployment
🔧 bc-Compatible
- Supports standard bc syntax and functions
- Rich math library: trig/hyperbolic (
sin,cos,tan, …), logarithms (log,ln,log10, …), powers (pow,sqrt,cbrt), aggregations (min,max,hypot) pluslength,scale, and Besselj(n,x)— short aliases likes(),c(),a(),l(),e()still work - Interactive REPL with cursor movement and editing
🧮 Complex & Matrix Literals
- Type complex numbers directly with
i, e.g.1+2i,(4-3i)/(1+2i), orabs(3+4i) - Multiply and add matrices inline using JSON-like brackets:
[[1,2],[3,4]] * [[5,6],[7,8]] - For purely imaginary values, give the coefficient explicitly (
1i,-2i) so regular bc identifiers likeikeep their original meaning
🏳️🌈 Colorful output
- write color means,
| color | means |
| cyan | can caluclate & can output |
| megenta | can't caluclate, can't output |
| yellow | danger input char, output warning |
| green | clean buffer message |
Platform
dntk support multi-platform 😊 mac, linux, freebsd, and windows!!!
- i686-osx
- x86_64-osx
- i686-linux
- x86_64-linux
- i686-windows
- x86_64-windows
- i686-freebsd
- x86_64-freebsd
Install
Mac
$ brew install nnao45/dntk/dntk
Linux
$ wget https://github.com/nnao45/dntk/releases/download/v3.1.1/dntk-v3.1.1-x86_64-unknown-linux-musl.zip
$ unzip dntk-v3.1.1-x86_64-unknown-linux-musl.zip
Windows
$ wget https://github.com/nnao45/dntk/releases/download/v3.1.1/dntk-v3.1.1-x86_64-pc-windows-msvc.zip
$ unzip dntk-v3.1.1-x86_64-pc-windows-msvc.zip
FreeBSD
$ wget https://github.com/nnao45/dntk/releases/download/v3.1.1/dntk-v3.1.1-x86_64-unknown-freebsd.zip
$ unzip dntk-v3.1.1-x86_64-unknown-freebsd.zip
Cargo
$ cargo install dntk
zplug
$ zplug 'nnao45/dntk', as:command, from:gh-r
Docker
Can use dntk docker image,
Look!! Very light weight!!🚀
$ docker images nnao45/dntk
REPOSITORY TAG IMAGE ID CREATED SIZE
nnao45/dntk latest 3a37b5d989b5 2 hours ago 10.5MB
And run,
$ docker run -it --rm nnao45/dntk:latest
And...
$ echo 'alias bc=dntk' >> ~/.bashrc
$ echo 'alias bc=dntk' >> ~/.zshrc
All OK!! 😎
Options
❯❯❯ dntk -h
Command line's multi-platform interactive calculator with high-precision arithmetic.
USAGE:
dntk [FLAGS] [OPTIONS]
FLAGS:
-h, --help Prints help information
--once Run at only once
-q, --quiet No print information message
--show-limits Print the local limits
-V, --version Prints version information
-w, --white Set White color in a output
OPTIONS:
-i, --inject <inject> Pre-run inject statement to the dntk [default: ]
-s, --scale <scale> Number of decimal places (max 28) [default: 20]
Note: --bc-path option has been removed as dntk no longer requires external bc command!
Pipe Support
$ echo "123 * 2" | dntk
246
behave, like bc ☺️
Paste Support
$ echo '( 1 + 2 + 3 + 4 + 51 ) / sqrt( 123 / 3 )' | pbcopy
$ pbpaste | dntk
9.52659947520496999698
Windows Support
No additional setup required! 🎉
dntk works out of the box on Windows without installing bc.exe. Just download and run!

Previous versions (v3.1.1 and earlier)
Older versions required bc.exe installation. If you're using an older version:
$ choco install gnuwin
Recommendation: Upgrade to the latest version for better Windows support!
Keybind
Basic Key
| key | feature |
| [, ← | cursor move to left |
| ], → | cursor move to right |
| 0~9 | Sendkey this number |
| Ctrl+C, Enter | Finish dntk app |
| Delete, Backspace | Delete current char |
| @ | Clean buffer |
Basic Operation
| key | feature |
| + | plus |
| - | minus |
| * | multiplication |
| / | division |
| ^ | exponentiation |
| % | remainder |
Operation for Logical
| key | feature |
| ! | boolean, relational |
| | | boolean |
| & | boolean |
| > | relational |
| < | relational |
| = | relational |
Using Function
dntk ships the bc classics plus a broad math toolkit:
- Aliases for bc-style shortcuts:
s(x) → sin(x),c(x) → cos(x),a(x) → atan(x),l(x) → ln(x),e(x) → exp(x) - Powers & roots:
sqrt(x),cbrt(x),pow(x,y) - Logs & exponentials:
ln(x),log10(x),log2(x),log(base,value)(arbitrary base),exp(x),expm1(x) - Trigonometric family:
sin,cos,tan,asin,acos,atan,atan2 - Hyperbolic family:
sinh,cosh,tanh,asinh,acosh,atanh - Rounding helpers:
abs,sign,floor,ceil,trunc,round - Aggregations:
min(...),max(...),hypot(x,y) - Precision utilities:
length(x)(digit count),scale(x)(fractional digits),obase=for base-2〜36 output - Randomness & special:
rand()/rand(n),srand(seed),j(n,x)Bessel (integer ordern)
more detail 👉 https://www.gnu.org/software/bc/manual/html_mono/bc.html
🔬 Technical Details
Architecture
dntk uses a hybrid approach for optimal performance and precision:
- Expression Parsing:
fasteval- Fast and lightweight expression parser - High-Precision Arithmetic:
rust_decimal- 28-digit decimal precision - Result Formatting: bc-compatible output format
Precision Comparison
| Calculator | Precision | Example: 1+0.7 | Example: 1/3 (20 digits) |
|---|---|---|---|
| bc | 20 digits (default) | 1.7 | .33333333333333333333 |
| dntk (old) | ~15 digits (f64) | 1.69999... ❌ | .33333333333333331483 ❌ |
| dntk (new) | 28 digits | 1.7 ✅ | .33333333333333333333 ✅ |
Dependencies
fasteval- Expression evaluationrust_decimal- High-precision decimal arithmetic (up to 28 digits)- Pure Rust implementation (no C library dependencies)
Why No bc Command Required?
Previous versions wrapped the external bc command. The new version:
- Implements bc-compatible arithmetic in pure Rust
- Eliminates subprocess overhead
- Works on all platforms without external dependencies
- Provides better precision (28 vs 20 digits)
Development Guide
Compile
Binary
$ make
Docker
$ make docker-build
Contribute
Always Welcome!! 😄
Have a nice rust hacking days✨😉
Writer & License
dntk was writed by nnao45 (WORK:Infrastructure Engineer, Twitter:@nnao45, MAIL:n4sekai5y@gmail.com).
This software is released under the MIT License, see LICENSE.
Dependencies
~5.5MB
~98K SLoC