dntk

Crates.iodntk
lib.rsdntk
version3.1.1
created_at2019-05-25 12:04:25.054618+00
updated_at2025-10-19 12:45:08.550951+00
descriptionCommand line's multi-platform interactive calculator, GNU bc wrapper.
homepagehttps://github.com/nnao45/dntk
repositoryhttps://github.com/nnao45/dntk
max_upload_size
id136901
size243,922
nnao45 (nnao45)

documentation

README

dntk

CI Release v3.1.1 crates docker license platform

dntk is command line's multi-platform Interactive calculator with bc-compatible syntax and high-precision arithmetic. gjf

✔︎ 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-decimal for 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) plus length, scale, and Bessel j(n,x) — short aliases like s(), 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), or abs(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 like i keep 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!

gjf

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 order n)

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:

  1. Expression Parsing: fasteval - Fast and lightweight expression parser
  2. High-Precision Arithmetic: rust_decimal - 28-digit decimal precision
  3. 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 evaluation
  • rust_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:sparkles::wink:

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.

Commit count: 0

cargo fmt