ActionScript2.0 で、perl でいうところの sprintf みたいなことをするにはどうしたらいいでしょうか。


var num:Number = 123.4567;
var str:String; // ここに "000123.456" のような文字列を入れたい。
// perl なら sprintf('%6.3f',$num);

回答の条件
  • 1人2回まで
  • 登録:2007/09/01 15:17:26
  • 終了:2007/09/01 17:24:12

回答(3件)

id:sukiyaki22 No.1

sukiyaki22回答回数299ベストアンサー獲得回数22007/09/01 16:23:25

id:nev

この回答は役に立ちません

2007/09/01 16:40:56
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/09/01 16:48:05

ポイント50pt

AS はあまり知らない & AS2 の実行環境が無いのでそれらしい書き方ができませんが……

とりあえず小数部とパディングで桁数を合わせるだけ。16進数とかはなし。

function formatNum(fmt, num) {
  if (parseFloat(fmt) == NaN) return '' ;
  var r = num.toString().split('.') ;
  var l = fmt.split('.') ;

  if (parseInt(l[1]) > 0) {
    var flen = parseInt(l[1]) ;
    if (flen > r[1].length) for (var i = 0; flen - r[1].length; ++i) r[1] += '0' ;
    else if(flen < r[1].length) r[1] = r[1].substr(0, flen) ;
  }
  var p = '' ;
  var ilen = parseInt(l[0]) ;
  var slen = r[0].length + r[1].length + (r[1].length > 0) ;
  if (ilen > slen) for (var i = 0; i < ilen - slen; ++i) p += l[0].indexOf('0') == 0 ? '0' : ' ' ;

  return p + r[0] + (r[1].length > 0 && l[1] != 0? '.'+r[1] : '') ;
}

trace(formatNum('05.2', Math.acos(-1))) ;
id:nev

ありがとうございました。

自前実装しないといけないということは、同等の関数はないということですかね…。

2007/09/01 17:20:46
id:KUROX No.3

KUROX回答回数3542ベストアンサー獲得回数1402007/09/01 16:58:39

ポイント50pt

http://natecook.com/downloads/sprintf.html

ここにあるライブラリを使う。

ライセンス関係はわからないので調べてください。

id:nev

ありがとうございました。

2007/09/01 17:23:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません