- ベストアンサー
小数点付きの余分な桁を消すには
014.5 002.1 のような小数点つきで整数の部分を3桁に揃えた 文字列のはじめの「0」や「00」を消して 普通の数字に戻したいのですが、どの様にすればよいのでしょうか? 厄介でしょうが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単に数値化するなら算術式を与えれば数値項目として処理されます。 $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
その他の回答 (2)
- leaz024
- ベストアンサー率75% (398/526)
文字列は数値演算すれば数値として解釈されるので、$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に」という解釈は誤りです。
お礼
すごい詳しいですね。 ありがとうございましたm(_ _)m
- masaboo
- ベストアンサー率58% (7/12)
$num = "002.1"; $num =~ s/^0+//; #頭の0を削除 print "$num\n"; などではいかがでしょう? $num = sprintf("%2.2f\n", $num); #整数2.小数2に なども使えそうです。
補足
下の方法でやると今度は少数点以下が2桁で表示されたりいろいろ おかしなことが起こったので、 正常に動作した上の方法でやろうと思うのですが、 000.4 などの小数のみで構成されてる文字は、変換すると .4 になってしまいます。 0.4 にできないでしょうか? よろしくお願いします。
お礼
分かりやすい解説で助かりました。 ありがとうございましたm(_ _)m