• ベストアンサー

小数点付きの余分な桁を消すには

014.5 002.1 のような小数点つきで整数の部分を3桁に揃えた 文字列のはじめの「0」や「00」を消して 普通の数字に戻したいのですが、どの様にすればよいのでしょうか? 厄介でしょうが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

単に数値化するなら算術式を与えれば数値項目として処理されます。 $str = '014.5'; $Result = 0 + $str; print $Result; # Result → 14.5 $str = '000.5'; $Result = 0 + $str; print $Result; # Result → 0.5 $str = '014'; $Result = 0 + $str; print $Result; # Result → 14

if_else
質問者

お礼

分かりやすい解説で助かりました。 ありがとうございましたm(_ _)m

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

文字列は数値演算すれば数値として解釈されるので、$num に値が入っているとして $num += 0; でよいでしょう。 正規表現でも $num =~ s/^0*(\d+\.\d+)/$1/; とすればできます。 printf でもできますが、 $num = sprintf "%.*f", length(substr($num,index($num,'.')+1)), $num; とすればできますが、あまりに複雑なので利用する価値はないでしょう。 ちなみに printf の %X.Yf という指定は、整数部、小数点、小数部の全てを含めた全体の最低桁数を X、小数部の桁数を Y として指定するもので、No.1 さんの「整数X.小数Yに」という解釈は誤りです。

if_else
質問者

お礼

すごい詳しいですね。 ありがとうございましたm(_ _)m

  • masaboo
  • ベストアンサー率58% (7/12)
回答No.1

$num = "002.1"; $num =~ s/^0+//; #頭の0を削除 print "$num\n"; などではいかがでしょう? $num = sprintf("%2.2f\n", $num); #整数2.小数2に なども使えそうです。

if_else
質問者

補足

下の方法でやると今度は少数点以下が2桁で表示されたりいろいろ おかしなことが起こったので、 正常に動作した上の方法でやろうと思うのですが、 000.4 などの小数のみで構成されてる文字は、変換すると .4 になってしまいます。 0.4 にできないでしょうか? よろしくお願いします。

関連するQ&A