Lua は通常構成されているため、プラットフォームの通常の倍精度浮動小数点形式を使用してすべての数値を格納します。今日のほとんどのデスクトップ プラットフォームでは、64 ビットの IEEE-754 形式になります。従来の知恵では、-1E15 から +1E15 の範囲の整数は、正確に表現されていると安全に仮定できます。
いずれにせよ、string.format()
関数はその引数をプラットフォームのprintf()
. と が理解するフォーマット文字列にprintf()
は%e
、%E
「科学的」表記%f
を強制するためと、単純な 10 進表記を強制するためのものがあります。また、最短表記%g
を選択してください。%G
例えば:
E:\...>lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org、PUC-Rio
> a = 1e17/3
> print(string.format("%f",a))
33333333333333332.000000
> print(string.format("%e",a))
3.333333e+016
> print(string.format("%.0f",a))
3333333333333332
値が 32 ビットの符号付き整数の範囲内に収まる場合は、その%d
形式も使用できることに注意してください。ただし、値がその範囲を超える場合、結果は明確に定義されません。マイクロ秒単位のシステム タイムスタンプは、32 ビットの範囲を超える可能性があります。
10 進数の 16 桁では精度が不十分な場合は、精度を上げるための選択肢がいくつかあります。
userdata
まず、真の 64 ビット整数を適切な算術メタメソッドのセットと共にパッケージ化することは難しくありません。これはLua メーリング リストで時折議論されますが、完成したモジュールが誰かによってリリースされたのを見た記憶がありません。
次に、Lua の作成者の 1 人が、任意精度演算をサポートする 2 つのモジュールをリリースしました: lbc と lmapmです。どちらもそのページにあります。
第 3 に、Google で何気なく検索すると、他の数学ライブラリ ラッパーがすぐに見つかります。