トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     object型を数値型にキャスト
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nacbox
Åê¹ÆNo.46154
投稿日時: 2010-10-18 15:04
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
object型を数値型にキャスト
AS2です。

object型のデータに入っている、数字のデータがあります。
これを計算などに使おうとすると数値型でないためうまくいきません。

これが、string型などであれば、

trace(typeof a);    // string
trace(a);           // 100

b = Number(a);

trace(typeof b);    // number
trace(b);           // 100

と、簡単にキャストされます。

しかし、上記変数aがobject型だと、その中身が"100"だとして、

trace(typeof a);    // object
trace(a);           // 100

b = Number(a);

trace(typeof b);    // number
trace(b);           // NaN

と、「キャストはされているっぽいのだが値が取得できない」という状態になります。

object型の値を、そのまま数値型に変換する方法はないでしょうか?

ちなみに、このスレッドのやり方は見ましたが、いちいち関数を介さなくちゃいけないのかな?と読み取れて、ちょっと面倒だなと感じています。
解釈が間違っているのかもしれませんが……。
コマツ
Åê¹ÆNo.46155
投稿日時: 2010-10-18 15:59
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
windows7
CS5.5 CS6
Re: object型を数値型にキャスト
nacboxさん、こんにちは。

プリミティブ型と複合型の変数の違いかと思います。
以下のページが参考になるかと思います。


Flashデベロッパーセンター:Flash ActionScript 2.0習得ガイド

Flash ActionScript入門ノート 3.4 データ型


数値と文字列は、プリミティブ型なので、キャストがうまく行くかと思います。
Object型の変数は、複合型(リファレンス型)なので、参照データをプリミティブなデータに変換しようして失敗するのではないかと思います。


データ内容によるかと思いますが、Object型にはtoString()という関数がありますので、Stringに変換してから、Number型にキャストするとうまく行くかもしれません。

//a→Object型の変数
trace(Number(a.toString()))


参考になればと思います。
野中文雄
Åê¹ÆNo.46156
投稿日時: 2010-10-18 16:00
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: object型を数値型にキャスト
まず、typeof演算子が返す値は、いわゆるデータ型ではありません。問題にされているのは、Object型のデータでなく、Array型つまり配列ではないのでしょうか。

配列は数値には変換できません。Number()関数は、数値に変換できない引数に対してはNaNを返します。そして、NaNtypeof演算子で評価すれば"number"です。
var a:Array = [100];
var b:Number;
trace(typeof a);  // object
trace(a);  // 100

b = Number(a);

trace(typeof b);  // number
trace(b);  // NaN

配列からエレメントを取出すには、インデックスを指定する必要があります。
b = a[0];
trace(typeof b);
trace(b);

引用:
nacboxさんは書きました:
AS2です。

object型のデータに入っている、数字のデータがあります。
これを計算などに使おうとすると数値型でないためうまくいきません。


----------------
 

nacbox
Åê¹ÆNo.46158
投稿日時: 2010-10-18 17:11
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
Re: object型を数値型にキャスト
コマツさん、野中さん、ありがとうございます!
いつも質問するばかりで、他の方の質問に回答できずに申し訳ないです。


引用:

まず、typeof演算子が返す値は、いわゆるデータ型ではありません。


このあたりの理解がなんとなく曖昧なまま進んでしまっているので、一度きちんと整理しなければなりませんね。

とりあえず、toString()をかませたら正常に数値変換できました。


引用:

問題にされているのは、Object型のデータでなく、Array型つまり配列ではないのでしょうか。


XMLのデータを使用しているのですが、使用しているXML読み込み用外部クラスの説明文によると、object型に各値が格納されるとあるので、たぶんobject型なのだと思います。
しかし、ここで「たぶん」と言ってしまうあたりが、自分の理解の浅さで恐縮です……。


ともかく、無事解決しました。
ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops