相关疑难解决方法(0)

从浮点数中删除尾随'.0'

我正在寻找一种方法将数字转换为字符串格式,删除任何多余的'.0'

输入数据是浮点数和字符串的混合.期望的输出:

0 - >'0'

0.0 - >'0'

0.1 - >'0.1'

1.0 - >'1'

我想出了以下生成器表达式,但我想知道是否有更快的方法:

(str(i).rstrip('.0') if i else '0' for i in lst)
Run Code Online (Sandbox Code Playgroud)

真值检查是为了防止0成为空字符串.

编辑:我现在或多或少可接受的解决方案是:

('%d'%i if i == int(i) else '%s'%i for i in lst)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,在python中没有优雅的方法来处理这个(相当简单的)情况.

python

44
推荐指数
7
解决办法
5万
查看次数

Perl舍入错误再次出现

显示问题的示例:

  • 有一个数字105;
  • 除以1000(结果0.105)
  • 粗化到2位小数应为:0.11

现在,几个脚本 - 基于另一个问题的答案:

这主要是经过推荐的,而且大部分是投票使用的解决方案printf.

use 5.014;
use warnings;
my $i = 105;
printf "%.2f\n", $i/1000;   #prints 0.10
Run Code Online (Sandbox Code Playgroud)

但打印错误的结果.在评论 /sf/answers/128721981/ @Sinan Unur说(6次评论):

使用sprintf("%.3f",$ value)也可用于数学目的.

但是,它"有时"不起作用......就像上面一样.

另一个推荐的解决方案Math::BigFloat:

use 5.014;
use warnings;
use Math::BigFloat;
my $i = 105;

Math::BigFloat->precision(-2);
my $r = Math::BigFloat->new($i/1000);

say "$r";   #0.10 ;(
Run Code Online (Sandbox Code Playgroud)

错误的结果也是如此.另一个推荐一个bignum:

use 5.014;
use warnings;
use bignum ( p => -2 );
my $i = 105;
my $r = $i/1000;
say "$r";   #0.10 ;(
Run Code Online (Sandbox Code Playgroud)

又错了.(

现在工作的人: …

perl

7
推荐指数
2
解决办法
1381
查看次数

标签 统计

perl ×1

python ×1