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

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

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

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

Q&A

解決済

4回答

858閲覧

JavaScript 8進数文字列を10進数文字列に変換する方法

kakky_0323

総合スコア4

JavaScript

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

0グッド

0クリップ

投稿2020/06/18 11:51

編集2020/06/18 13:29

8進数文字列をそのまま10進数文字列として変換する方法を教えていただきたいです。
(例)
8進数文字列"70" → 10進数文字列"70"

追記
8進数文字列"70" → 10進数文字列"56"に変換するわけではありません。

昨日私が作成している電卓アプリの四則演算の不具合という質問で答えとして計算結果が8進数になっているという回答をいただき、8進数から10進数へ変換しようと思い模索したのですが良策が見つからないため質問いたしました。

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

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

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

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

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

jun68ykt

2020/06/18 12:01

ご質問には、例として 8進数文字列"70" → 10進数文字列"70" とありますが、8進数表記による 70 を、10進数で表すと 56 になります。 文字列"70" を 文字列"56" にするにはどうしたらいいか?というご質問ということでよいでしょうか?
kakky_0323

2020/06/18 12:08

いえ、8進数の文字列と同じ文字列をそのまま10進数の文字列として表示するという意味です。70(8進数)→56(10進数)ではなく70(8進数)→70(10進数)ということです。 説明が疎かになってしまい申し訳ないです。
jun68ykt

2020/06/18 12:17

ご返答ありがとうございます。ご質問の趣旨として、「 "70" を"56"にしたいわけではない。」ということは理解できました。
Daregada

2020/06/18 13:11

ええと、文字列 "70" を何進数として解釈するかはパースする人の自由なんですが、あなたにはそれがなぜ8進数だと「わかっていて」、(同じ数字のまま)10進数に「変換したい」のかを、質問文の中で説明されるとよいかと思います(ご存じかもしれませんが、質問文は後から編集可能です)。 なお、一般に「8進数文字列を10進数文字列に変換したい」と尋ねられたら、「(たとえば)"70"を"56"にしたいのだな」と解釈することが自然です。
Daregada

2020/06/18 13:34

> 昨日私が作成している電卓アプリの四則演算の不具合という質問で答えとして計算結果が8進数になっているという回答をいただき、8進数から10進数へ変換しようと思い模索したのですが良策が見つからないため質問いたしました。 おおう。それは、「文字列の先頭に0を付けていること」が原因なので、先頭に"0"が付かないように修正すればいいのでは。
kakky_0323

2020/06/18 13:39

ご指摘ありがとうございます。 文字列の先頭に0がついていると勝手に8進数に変換されてしまうということでしょうか?
Daregada

2020/06/18 13:49 編集

正確には、「あなたの電卓アプリでは、計算を`eval`でJavaScriptに丸投げしているので、JavaScriptがevalの引数を処理する際に、文字列がJavaScriptコードとして評価される。JavaScriptでは、`010`など0で始まる数値は8進数と解釈する」です。
kakky_0323

2020/06/18 13:48

無事解決いたしました。色々とご指摘いただきありがとうございました。
kakky_0323

2020/06/18 13:52

evalを使用していたため文字列で解釈されていたのですね。とても参考になりました。ありがとうございます。
guest

回答4

0

ベストアンサー

質問者さんの中で解釈がおかしいだけだと思います

javascript

1console.log(parseInt("70",8).toString(8));

投稿2020/06/18 13:40

yambejp

総合スコア116724

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

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

kakky_0323

2020/06/18 13:58 編集

理屈はよくわからなかったのですが、無事10進数で表示されました!ありがとうございます!
Daregada

2020/06/18 14:38

「何だか知らんが、とにかくよし!」ってのをリアルではじめて見たわ。
kakky_0323

2020/06/18 14:59

そんなに嫌味っぽく書かなくても...。 前回の質問含めてかなり前から悩んでいたことだったので正しく実行できたのが嬉しかっただけです。まぁ結局また不具合が発生してしまったので先ほどDaregadaさんが仰っていた0を消す方法を模索してみようと思います。
Daregada

2020/06/18 15:15

ええと、parseInt("70",8) の返り値がどんな値になり、それを toString(8) すると何が得られるのかを調べてみたほうがいいと思いますよ。
kakky_0323

2020/06/18 15:25

少し調べてみます。それと先ほど調べて気になったのですがtoString()の値って8でいいのでしょうか?10進数に直すのなら10を入れる気がするのですが。教えていただければ幸いです。
kakky_0323

2020/06/18 15:47 編集

一応paiza.ioというサイトで試しに実行してみたのですがparseInt("70",8)をconsoleしたところ56と表示されました。次にtoString(8)したところ70に戻りました。 ただこれを電卓内でやっても10進数には戻らないです...。
Daregada

2020/06/18 15:48 編集

だから、これは「70」という文字列を、「8進表記と見なして」整数にパースし(56が得られる)、その整数を「8進表記の」文字列に変換してるんですよ。console.log("70"); と書いてあるのと同じです。
kakky_0323

2020/06/18 16:02

1度10進数(整数)に変換してから、8進数の文字列に再度変換しているということでしょうか。最後に8進数の文字列に変換した際「070」とは表示されないのでしょうか?
Daregada

2020/06/18 16:05

toString(radix) は、基数 radix が何であれプレフィクスを付けたりはしません。
kakky_0323

2020/06/18 16:20

そうだったのですね、わかりました。 あとはもう少し自分で調べてやってみようと思います。 夜遅くまで付き合わせてしまい申し訳ないです。 色々と教えていただきありがとうございました。
guest

0

8進数文字列"70" → 10進数文字列"70"

それは「8進数文字列を10進数文字列に変換する」ではなく、「何もしない」です。
入力の文字列を文字列として読み、何もしないでください。

とはいえ、何もしないで済むのに問題を感じているということは、何か余計な処理をしてしまっているか、望んでいる結果を正しく説明できていないのでしょう。
たぶん問題はその「変換」の前後に潜んでいるのだと思います。
その前後でどのような処理をしたいのですか?

投稿2020/06/18 13:21

ikadzuchi

総合スコア3047

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

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

kakky_0323

2020/06/18 13:36

ご回答ありがとうございます。 先ほどご指摘いただき追記にも記したのですが、現在作成途中の電卓アプリの計算結果が8進数で表示されてしまうため表示されている文字列はそのままで10進数に変換しようと考えたのですがうまくいかないため質問させていただきました。
kakky_0323

2020/06/18 13:49

無事解決いたしました。ありがとうございました。
guest

0

parseInt( "70" );

で70かえってきますよ

投稿2020/06/18 12:41

y_waiwai

総合スコア88042

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

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

anndonut

2020/06/18 12:43

なるほど、8進数表現はなんらかの10進数表現にも解釈できるから文字列をそのままパースしてみようというわけですね。
y_waiwai

2020/06/18 12:49

文字列にするなら、String(parseInt("70")) で、"70"が帰ってきますが、 それってわざわざする意味あるの?というはなしになりますが。
kakky_0323

2020/06/18 13:03

ご回答ありがとうございます。 parseInt("70")の"70"は8進数文字列という解釈でよろしいでしょうか?
y_waiwai

2020/06/18 13:04

文字列に8進も10進も区別はないですよ
kakky_0323

2020/06/18 13:09

言葉足らずでした。この"70"は8進数の"70"を代入したのでしょうか?
y_waiwai

2020/06/18 13:13

繰り返しますが、文字列に8進も10進も区別はないです 8進数として読めば8進数ですし、10進数として読めば10進数です。 16進数として読めば、16進数となります それに区別はないです
kakky_0323

2020/06/18 13:49

無事解決いたしました。ありがとうございました。
guest

0

8進数でパースかけて10進数でプリントすればいいです。私はMDNを参照しますがより正確な情報はW3Cのサイトだったと思います。

投稿2020/06/18 11:55

anndonut

総合スコア667

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

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

kakky_0323

2020/06/18 12:30

ご回答ありがとうございます。 ご指摘いただき追記に記したのですが、その方法だと8進数"70"が10進数"56"に変換されてしまうと思われます。苦言を呈すようで申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問