Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NumberとparseFloatとparseInt関数を使ったキャストの違い

Posted at

■はじめに

こんにちは。白水(しらみず)と申します。
普段は不動産スタートアップでフロントエンドエンジニアとしてお仕事しています。
不動産系のサービスに携わっていると、賃料や管理費、敷金、礼金など数字に関わるものを多々扱うことがあります。
その中でも整数なのか少数なのかで、利用するJSのメソッドが違うため、毎回動作を確認するのが大変でした。
そこで、今回「Number()」と「parseFloat()」と「parseInt()」の動作違いを検証したので備忘録として残そうと思います。
短い記事なので、良ければご覧ください。

Shiramizu_Junya lit.link(リットリンク)

■Numberメソッド

Number("12"); // 12
Number("015", 10); // 15
Number("12.3"); // 12.3
Number("12.00"); // 12
Number("12.03"); // 12.03
Number("0.35"); // 0.35
Number("15,123"); // NaN
Number(undefined); // NaN
Number(null); // 0
Number(''); // 0

整数、少数を気にしないで、とりあえず数値型に変えたければNumberが良さそうな気がします。

しかし、Number(null);Number('');が「0」になるのは気をつけたほうが良さそうです。

Number - JavaScript | MDN

■parseIntメソッド

parseInt('12', 10); // 12
parseInt("015", 10); // 15
parseInt('12.3', 10); // 12
parseInt('12.9', 10); // 12
parseInt('12.00', 10); // 12
parseInt("12.03", 10); // 12
parseInt("0.35", 10); // 0
parseInt("15,123", 10); // 15 → カンマあると、カンマ以降が消えちゃう。。。
parseInt(undefined, 10); // NaN
parseInt(null, 10); // NaN
parseInt('', 10); // NaN

少数でも切り捨てて整数にしたい場合は、parseIntが良さそうです。

四捨五入したい場合は、Math.floor()Math.ceil()や**Math.round()**を使ったほうが良さそうです。

しかし、Number型に変換できないとNaNになるので、ここは注意が必要かなと思います。

日本のお金は「15,123円」のように「,」が入ることがあるので、そこは注意が必要そうです。

parseInt() - JavaScript | MDN

■parseFloatメソッド

parseFloat('12'); // 12
parseFloat("015", 10); // 15
parseFloat("12.3"); // 12.3
parseFloat("12.00"); // 12
parseFloat("12.03"); // 12.03
parseFloat("0.35"); // 0.35
parseFloat("15,123"); // 15 → カンマあると、カンマ以降が消えちゃう。。。
parseFloat(undefined) // NaN
parseFloat(null) // NaN
parseFloat(''); // NaN

少数を維持したい場合は、parseFloat()でいい感じです。

parseFloat() - JavaScript | MDN

■まとめ

数値を扱うWebサービスは多々ある中で、メソッドの戻り値が意図したものになるか気にする必要があるので、この機会に動作確認できてよかったです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
iimon
イイモン (良い者) たちが集まり、 イイモン (良いモノ) を創造し、 夢に溢れた イイモン (良い門) を開く。 そしてその向こうに、“ IIMON WORLD ” がきっとある!

Comments

dgcdsbsd2
@dgcdsbsd2

単項プラスがお勧めです。

単項プラスは数値に対して他の演算を行わないため、非数値を数値に変換する最も高速で好ましい方法です

0
srj927483
@srj927483

parseInt()parseFloat()は正しい値を返さない場合があるので、文字列をそのままの値の数値に変換する用途としては好ましくありません。

['12.34.56', '12e3', '0xff'].forEach(v => console.log(`
  '${v}'
    +'${v}' = ${+v}
    parseInt('${v}') = ${parseInt(v)}
    parseFloat('${v}') = ${parseFloat(v)}
`));

/*
'12.34.56'
  +'12.34.56' = NaN
  parseInt('12.34.56') = 12 // 不正解
  parseFloat('12.34.56') = 12.34 // 不正解

'12e3'
  +'12e3' = 12000
  parseInt('12e3') = 12 // 不正解
  parseFloat('12e3') = 12000

'0xff'
  +'0xff' = 255
  parseInt('0xff') = 255
  parseFloat('0xff') = 0 // 不正解
*/
0

Let's comment your feelings that are more than good

Qiita Conference 2024 Autumn will be held!: 11/14(Thu) - 11/15(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

Takahiro Anno, Masaki Fujimoto, Yukihiro Matsumoto(Matz), Shusaku Uesugi / Nicolas Ishihara(Vercel Inc.)

View event details

Being held Article posting campaign

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address