免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2565 | 回复: 10
打印 上一主题 下一主题

请教浮点数变量内插问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-03 11:11 |只看该作者 |倒序浏览
假如有类似于1.0000这样的浮点数,当作为变量内插后,可能会被显示为整数1,例如下面的代码:

  1. use 5.010;
  2. use strict;
  3. use warnings;

  4. my $ft = 1.0000;

  5. my $str = "this is a float: " . $ft;

  6. say $str;
复制代码
这会在终端显示为this is a float: 1,我需要让浮点数原样显示出来,this is a float: 1.0000,有没有快捷办法?在这个例子中printf就可以满足需求,可我需要在更复杂的情况下内插变量,比如在正则表达式的替换操作中内插一个这样的浮点数变量,改如何做,请教大家!

我的环境是Strawberry Perl 5.16.1

论坛徽章:
0
2 [报告]
发表于 2012-12-03 11:28 |只看该作者
回复 1# hailongchang


    将数字当成字符串使用

论坛徽章:
0
3 [报告]
发表于 2012-12-03 11:35 |只看该作者
能说的详细点吗,就比如我的这个例子,不用printf,该如何做呢?回复 2# wsxedcer


   

论坛徽章:
0
4 [报告]
发表于 2012-12-03 11:37 |只看该作者
回复 1# hailongchang
  1. #!/usr/bin/env perl
  2. use Math::FixedPrecision;
  3. my $a=new Math::FixedPrecision("1.000");
  4. print "this is float: $a\n";

  5. this is float: 1.000
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-12-03 11:39 |只看该作者
‘1.0000’ ?

论坛徽章:
0
6 [报告]
发表于 2012-12-03 11:46 |只看该作者
回复 4# tkgp
这个好没说服力,重写个
  1. #!/usr/bin/env perl
  2. use Math::FixedPrecision;
  3. my $a=new Math::FixedPrecision("1.000");
  4. my $b=$a*3;
  5. print "this is float: ".$b."\n";

  6. this is float: 3.000
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2012-12-03 13:32 |只看该作者
本帖最后由 jason680 于 2012-12-03 13:33 编辑

回复 1# hailongchang

How about sprintf

$ perl -e 'use v5.10;$ft = 1.0000;my $str = sprintf("this is a float: %.4f", $ft);say $str'
this is a float: 1.0000

论坛徽章:
0
8 [报告]
发表于 2012-12-03 16:37 |只看该作者
回复 7# jason680

这样也可以,就是要引入一个新的变量,稍显麻烦


   

论坛徽章:
0
9 [报告]
发表于 2012-12-03 16:39 |只看该作者
回复 6# tkgp

这个方法不错,受教了,多谢!

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2012-12-03 17:41 |只看该作者
回复 8# hailongchang

sometime it also be changed ...

$ cat fixedPrecision.pl
#!/usr/bin/env perl
use strict;
use warnings;

use Math::FixedPrecision;

my $na=new Math::FixedPrecision("1.000");
my $nb=$na*3.3/7;
print "this is float: ". $na . "\n";
print "this is float: ". ($na *3.3) . "\n";
print "this is float: ". (3.3 * $na) . "\n";
print "this is float: ". ($nb) . "\n";
print "this is float: ". ($na*3.3/7) . "\n";

$ perl fixedPrecision.pl
this is float: 1.000
this is float: 3.3
this is float: 3.3
this is float: 0.5
this is float: 0.5

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP