At 02:09 25-09-99 -0500, you wrote:
>Halo,
>
>[~]$ perl -e '$a = 0; printf("%f\n",$a * -1)'
>-0.000000
>[~]$ perl -e '$a = 0; printf("% #-7.3f\n",$a * -1)'
>-0.000
>[~]$ perl -e '$a = 0; print $a * -1, "\n"'
>-0
>[~]$ perl -e 'printf("% #-7.3f\n",0 * -1)'
> 0.000
>
>Kok kalo suatu variable yg nilainya nol dikalikan dengan bilangan
>negatif hasilnya jadi minus nol yah? Kenapa sih? dan gimana biar
>nampilinnya nol aja nggak pake minus sign?
untuk memformat bilangan real, perl masih menggunakan printf(3) dan
sprintf(3). jadi kelakuannya bergantung pada kelakuan library C
tsb. saya coba di Win kelakuannya berbeda (note: %% = %):
c:\4>perl -e "$a = 0; printf(qq[%%f\n],$a * -1)"
0.000000
c:\4>perl -e "$a = 0; printf(qq[%% #-7.3f\n],$a * -1)"
0.000
c:\4>perl -e "$a = 0; print $a * -1, qq[\n]"
0
c:\4>perl -e "printf(qq[%% #-7.3f\n],0 * -1)"
0.000
bilangan real memang disimpan dengan 1 bit sign. termasuk 0.
jadi memang ada +0 dan -0. kalo emang pengen nampilin 0 selalu
sebagai 0 dan tidak pernah -0, anda bisa assign lagi 0 ke
variabel yang diinginkan. misalnya:
>>>>>
#!/usr/bin/perl
sub my_sprintf {
my $fmt=shift;
my @copy=@_;
for (@copy) { $_ = 0 if $_ == 0 }
sprintf($fmt,@copy);
}
sub my_printf {
print my_sprintf(@_);
}
$a=0;
my_printf "%f\n",$a * -1;
my_printf "% #-7.3f\n",$a * -1;
#print $a * -1, "\n";
my_printf "% #-7.3f\n",0 * -1;
<<<<<
sayang fungsi built-in printf dan sprintf tidak bisa di-override.
kalo bisa asik tuh...
--
Steven Haryanto <[EMAIL PROTECTED]>
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]