質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

2649閲覧

javascriptでオーバーフローが起こる大きな数字の計算

asasaas

総合スコア26

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/10/04 09:35

編集2021/10/08 02:15

解決したいこと

大きい数字から1だけマイナスする計算をできればライブラリを利用せず実現したいです。

1241516141123352(ランダムな数字)から1241516141123351を導出する

試したこと

色々と方法を考えてみましたが、スマートな方法があればぜひ教えてください。

追記

みなさんご回答ありがとうございます。
BigIntの方試してみたのですが、1241516141123352の場合だとうまく動作しますが、より多い桁数(20桁のランダムな数字)などの場合正常に動作しません。
これはBigIntにも扱える最大値があってそれ以上を扱うことはできないという認識であっていますか?

console.log(BigInt(1241516141123352111)) >> 124151614112335216n

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

文字列の数値をBigIntにして、計算するときは数字nで処理

javascript

1var num=BigInt("1241516141123352"); 2console.log(num-1n);

投稿2021/10/04 10:33

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

BigIntを使用することをご検討ください。BigIntは最新のモダンブラウザーでサポートされています。(参照: BigInt | Can I use...)

なお、通常の数値であるNumberは、IEEE 754の倍精度64ビットバイナリ形式の浮動小数点数であり、整数を表すには限界があります。安全に表現可能な最大の整数がNumber.MAX_SAFE_INTEGERであり、これを超える整数を扱った場合、丸め誤差によって数学的な計算よりも不正確な値になります。

投稿2021/10/04 10:13

raccy

総合スコア21739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

bigintを使えばオーバーフローは起きません。

投稿2021/10/04 10:10

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/01/04 07:46

> これはBigIntにも扱える最大値があってそれ以上を扱うことはできないという認識であっていますか? 違います。BigInt(1241516141123352111)と、ふつうの数値で値を書いているので、数値が認識された時点で不正確な値となってしまっています。余計な解釈の入らない、文字列で渡しましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問