
No.4ベストアンサー
- 回答日時:
1000倍して整数部分での切り捨てを行うのがわかりやすい実装では。
$value = "19.9996";
$value_int = int( $value * 1000 ); # 100倍して整数に。負の値を扱う時はint関数は不適当かもしれません。注意。
$output1 = substr( $value_int, 0, -3 ); # 整数部
$output2 = substr( $value_int, -3 ); # 小数部
print "$output1.$output2";
厳密な精度を要求する丸め動作は Perl が使用するシステム丸めを信用せず、代わりに自分自身で丸め関数を実装するべきです、とマニュアルにも書かれています。
No.5
- 回答日時:
皆さんのすばらしい回答もありますが、参考までにこんなやり方もあるんだ程度に思って貰えれば幸いです。
print &round(19.9996,3);
sub round{
my($rit);
if($_[0]=~/\./){
my($n,@a,@b);
@a=split(/\./,$_[0]);
@b=split(//,pop(@a));
push(@a,".");
for($n=0;$n<$_[1];$n++){
push(@a,$b[$n]);
}
$rit=join("",@a);
}else{$rit=$_[0];}
return $rit;
}
自作関数roundは(数字,少数点以下の桁数)を渡すと、自動的に余分な部分を切り落として、返すものです。
基本的な考え方は、整数値と小数点値に切り分けて、(配列に消えた.を入れて)小数点値を前から指定数分だけ取り出し、配列に入れて最後にドッキングさせています。
自分の求める関数がないなら無理矢理関数を作ってしまうのも手です。
本当に処理も多く、全くオススメできないソースですが、こういうやり方もあります。
No.2
- 回答日時:
#1です
$a=sprintf("%.4d",$i);
は
$a=sprintf("%.4f",$i);
です。
bazaxさん、このやり方は嫌いなんですよね?
No.1
- 回答日時:
$i=19.9996;
@a={"0","0",".","0","0","0","0"};
$a=sprintf("%.4d",$i);
$a=substr($a,0,5);
print("$a\n");
なら出来るのですが、
エスケープシーケンスで切捨ては出来たかな・・・?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでファイルの拡張子を除い...
-
桁数指定と四捨五入
-
画面を強制的に再描画させる方法
-
複数の配列の全ての組み合わせ...
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
VBAの変数は何故「i」から始ま...
-
ループ7回目の悪役令嬢は、元敵...
-
範囲指定したセルを1つずつ飛...
-
正しいWebBrowserの使い方(ル...
-
UWSCの終了の仕方
-
Excel VBA For Nextっていらな...
-
WinAPI「MsgWaitForMultipleObj...
-
Escキーを押すと、中断する時と...
-
EXCEL VBA ユーザーフォームの...
-
ウィーンブリッジ発進回路
-
Excel VBA ユーザーフォームの...
-
ハッシュマーク以降のアドレス取得
-
乱数の桁数指定、または範囲指定。
-
null 参照の例外が実行時に発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlで2つの配列を比較する方...
-
python質問
-
桁数指定と四捨五入
-
[Perl]長すぎるif文を簡単にしたい
-
DBIを使ってのデータの取り出し...
-
perlでファイルの拡張子を除い...
-
print文内でのsplice文と代入に...
-
ソート時同じ値がある場合、表...
-
visual basic 2015で文字列の1...
-
配列内定義サブルーチン呼び出し
-
Perlについて教えてください!
-
index関数で複数個抜き出す
-
ループ中でのmy宣言と処理速度
-
二次元配列のつかいかた。
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
おすすめ情報