首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Perl中将整数转换为浮点值?

如何在Perl中将整数转换为浮点值?
EN

Stack Overflow用户
提问于 2022-10-26 10:37:28
回答 2查看 110关注 0票数 1

我搜索内置函数将整数转换为浮动类型,但是没有。我想把一个数字1000转换成1000.0。

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 13:57:52

对于实际的数学,不需要转换数字。Perl没有区分整数和浮点数(它实际上是在遮罩下进行的,但这与此无关)。

如果要输出带有小数的数字,可以分别使用sprintfprintf

%f转换正是您在这里想要的。你可以告诉它在逗号后面有小数。

代码语言:javascript
运行
复制
printf '%.1f', 1000; # will print 1000.0

这将尊重您的地区,并使用正确的标志逗号。

票数 5
EN

Stack Overflow用户

发布于 2022-10-26 14:09:47

如果您实际上是在询问如何将浮点数转换为带有小数位的十进制字符串表示形式,那么您可以使用printf/sprintf

例如,下面的打印$x带有一个小数位,无论它是存储为整数还是浮点数的数字。

代码语言:javascript
运行
复制
my $x = 1000;
printf "%.1f", $x;   # 1000.0

但是,如果您确实想按照您的要求转换为浮点数,那么就没有内置的函数可以这样做了。

Perl将在需要时自动将标量转换为浮点数(例如,当整数乘以0.1时),因此通常不需要这样做。事实上,没有内置的机制来做这件事。

1.0创建一个浮点数(NOK)时,您甚至不能通过乘以1.0 (使用* 0.1*= 0.1)来获得浮点数。

代码语言:javascript
运行
复制
$ perl -MDevel::Peek -e'
   my $x = 1000;      Dump( $x );
   my $y = 1.0;       Dump( $y );
   my $z = $x * $y;   Dump( $z );
'
SV = IV(0x55efe5c37e58) at 0x55efe5c37e68
  REFCNT = 1
  FLAGS = (IOK,pIOK)      <-- Signed integer
  IV = 1000
SV = NV(0x55efe5c37e98) at 0x55efe5c37eb0
  REFCNT = 1
  FLAGS = (NOK,pNOK)      <-- Floating point number
  NV = 1
SV = IV(0x55efe5c37ff0) at 0x55efe5c38000
  REFCNT = 1
  FLAGS = (IOK,pIOK)      <-- Signed integer
  IV = 1000

这是你不应该做的事。

问题是,一些接口赋予了如何存储数字的意义。例如,JSON序列化程序可能会序列化以整数形式存储的数字,而不是存储为浮点数的数字。这可以被认为是一种错误。

不管是否有错误,它都不会改变您需要所请求的转换的事实。它可以使用Perl来完成。

代码语言:javascript
运行
复制
use Inline C => <<'__EOS__';

   SV* SvNV_force( SV* sv ) {
      SvREFCNT_inc( sv );
      sv_setnv( sv, SvNV( sv ) );
      return sv;
   }

__EOS__

use Devel::Peek qw( Dump );

my $x = 1000;       Dump( $x );
SvNV_force( $x );   Dump( $x );
代码语言:javascript
运行
复制
SV = IV(0x55a354e92508) at 0x55a354e92518
  REFCNT = 1
  FLAGS = (IOK,pIOK)      <-- Signed integer
  IV = 1000
SV = PVNV(0x55a354e611a0) at 0x55a354e92518
  REFCNT = 1
  FLAGS = (NOK,pNOK)      <-- Floating point number
  IV = 1000
  NV = 1000
  PV = 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74206381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档