in reply to Re: Perl is ignoring fractional part sometimes
in thread Perl is ignoring fractional part sometimes

It looks like I'm going to have to stringify every value I get from a Tk::Entry box.

OpenSUSE Leap 42.1 regressed perl to 5.18.2 from 5.20.1 in 13.2. It didn't work either. I'm currently upgrading Manjaro which has an up to date perl 5.24.0. I'll report on that once the update is done.

Looks like I'm going to have to submit a bug on Tk. Strange that no one has noticed this already.

Thanks for all your help

  • Comment on Re^2: Perl is ignoring fractional part sometimes

Replies are listed 'Best First'.
Re^3: Perl is ignoring fractional part sometimes
by jinnicky (Sexton) on Jul 19, 2016 at 17:14 UTC

    Just for completeness, I tested it with python and tcl to see if the underlying Tk has a problem. Both worked without problem.

    I did test it on perl 5.24.0 with the following code:

    #!/usr/bin/perl -w use warnings; use strict; use Tk; use Devel::Peek; my $scale = 22.5; my $x = 14; my $foo = $x * $scale; # use in numeric context (set NV and IV) my $sb = 22.5 * 14; my $i=0; print "\n0 str: <$scale> / num: <".(0+$scale)."> product $foo should b +e $sb\n"; Dump($scale); my $mw = MainWindow->new; $mw->Entry(-textvariable=>\$scale)->pack; $mw->bind("<Key-Return>",\&calc); MainLoop; sub calc { $foo = $scale * $x; my $s2 = $scale.' '; my $foobar = $s2 * $x; $i++; print "\n$i str: <$scale> / num: <".(0+$scale)."> product $foo str +ingified $foobar should be $sb\n"; Dump($scale); }

    This seemed to work originally. If you just hit enter a couple of times it fails with:

    0 str: <22.5> / num: <22.5> product 315 should be 315 SV = PVNV(0x19572d0) at 0x1982d20 REFCNT = 2 FLAGS = (NOK,pIOK,pNOK) IV = 22 NV = 22.5 PV = 0x196fa80 "22.5"\0 CUR = 4 LEN = 32 1 str: <22.5> / num: <22> product 315 stringified 315 should be 315 SV = PVMG(0x1ed5f60) at 0x1982d20 REFCNT = 3 FLAGS = (GMG,SMG,IOK,NOK,POK,pIOK,pNOK,pPOK,UTF8) IV = 22 NV = 22.5 PV = 0x196fa80 "22.5"\0 [UTF8 "22.5"] CUR = 4 LEN = 32 MAGIC = 0x1fa6a30 MG_VIRTUAL = &PL_vtbl_uvar MG_TYPE = PERL_MAGIC_uvar(U) MG_LEN = 24 MG_PTR = 0x1f24b40 "\260(=\252\254\177\0\0\20==\252\254\177\0\0\0j +\372\1\0\0\0\0" 2 str: <22.5> / num: <22> product 308 stringified 315 should be 315 SV = PVMG(0x1ed5f60) at 0x1982d20 REFCNT = 3 FLAGS = (GMG,SMG,IOK,NOK,POK,pIOK,pNOK,pPOK,UTF8) IV = 22 NV = 22.5 PV = 0x196fa80 "22.5"\0 [UTF8 "22.5"] CUR = 4 LEN = 32 MAGIC = 0x1fa6a30 MG_VIRTUAL = &PL_vtbl_uvar MG_TYPE = PERL_MAGIC_uvar(U) MG_LEN = 24 MG_PTR = 0x1f24b40 "\260(=\252\254\177\0\0\20==\252\254\177\0\0\0j +\372\1\0\0\0\0"

    As you can see in section 2, the product reverted to 308 going back to the IV value. The same thing happened on 5.20.1. The flags changed a little, but the results were the same.

    I've submitted a report on this to bug-Tk at rt.cpan.org