在PHP中减去2个数字时如何保持前导零?

在PHP中减去2个数字时如何保持前导零?,php,Php,这: 导致 $difference = 05-1; 如果我这样做,也是一样的: 4 在保留前导零的同时,是否有一种内在的减法方法?我知道我可以检查差异是否只有1个字符,如果是的话,添加一个前导零,但我只是想知道是否有一种默认方法可以在0已经存在的情况下返回结果。不,我认为PHP不会在本机上保留前导0,除非它是浮点。在PHPs头脑中,4is4not04tho0.4is0.4 因此,如果您需要整数中的前导0,请降低10以填充它 不,我不认为PHP本机会保持领先的0,除非它是一个浮点。在PHPs头

这:

导致

$difference = 05-1;
如果我这样做,也是一样的:

4

在保留前导零的同时,是否有一种内在的减法方法?我知道我可以检查差异是否只有1个字符,如果是的话,添加一个前导零,但我只是想知道是否有一种默认方法可以在0已经存在的情况下返回结果。

不,我认为PHP不会在本机上保留前导0,除非它是浮点。在PHPs头脑中,
4
is
4
not
04
tho
0.4
is
0.4

因此,如果您需要整数中的前导
0
,请降低
10
以填充它


不,我不认为PHP本机会保持领先的0,除非它是一个浮点。在PHPs头脑中,
4
is
4
not
04
tho
0.4
is
0.4

因此,如果您需要整数中的前导
0
,请降低
10
以填充它


如果只是输出问题,可以使用printf()添加前导零。以下是:

<?php 
$difference = (05-1);

echo str_pad($difference, 2, "0", STR_PAD_LEFT);//04
?>

<?php 
$difference = 234;

echo str_pad($difference, 2, "0", STR_PAD_LEFT);//234
?>

%02d转换为用“0”(%02d)填充2个空格(%02d),并将其格式化为整数(%02d)。使用printf()可以设置精度、添加前导字符以及在输出文本时使用占位符。

如果只是输出问题,可以使用printf()添加前导零。以下是:

<?php 
$difference = (05-1);

echo str_pad($difference, 2, "0", STR_PAD_LEFT);//04
?>

<?php 
$difference = 234;

echo str_pad($difference, 2, "0", STR_PAD_LEFT);//234
?>


%02d转换为用“0”(%02d)填充2个空格(%02d),并将其格式化为整数(%02d)。printf()在设置精度、添加前导字符和在输出文本时使用占位符方面可以做很多工作。

请小心。前导零表示八进制符号,因此可能会发生类似这样的意外情况:
echo 012-4;//打印6张
。小心!前导零表示八进制数,因此
08-04
将导致错误。并且
023-005
不是018。在这个脚本中,我将始终减去2个数字,第一个数字可能有前导零,也可能没有前导零(如果它在1和9之间,它将只有前导零),第二个数字将始终是数字1(没有前导零)。这种情况会导致任何意外结果吗?是的,如果第一个数字是
08
09
。这些不是有效的八进制数,所以它假设为零<代码>回波08-1打印“-1”。@Wiseguy啊,好的,谢谢你的提醒。我会将第一个数字转换为不带零,然后将前导的零只添加到答案中,这将为我节省一个bug。小心这个。前导零表示八进制符号,因此可能会发生类似这样的意外情况:
echo 012-4;//打印6张
。小心!前导零表示八进制数,因此
08-04
将导致错误。并且
023-005
不是018。在这个脚本中,我将始终减去2个数字,第一个数字可能有前导零,也可能没有前导零(如果它在1和9之间,它将只有前导零),第二个数字将始终是数字1(没有前导零)。这种情况会导致任何意外结果吗?是的,如果第一个数字是
08
09
。这些不是有效的八进制数,所以它假设为零<代码>回波08-1打印“-1”。@Wiseguy啊,好的,谢谢你的提醒。我会将第一个数字转换为不带零,然后将前导零仅添加到答案中,这将为我节省一个bug。这会将结果填充到预定义的长度。OP提出了一种“保留”前导零的方法,这让我认为
05-1
应该打印为
04
,而
5-1
应该打印为
4
(而
00005-1
应该打印为
00004
)。OP还需要澄清他们是想保留所有的零,还是保持相同数量的位置(即
010-9
001
还是
01
?)。@octern这个答案中的方法适合我的情况,我只是在减去整数,所有的一位数都应该有一个前导0。@JakeRow123是的,我知道这是一个问题(示意性输出),尽管它似乎有点混淆了其他人。它也可以用以下内容填充:
$diff=sprintf(“%02d”,05-1)我无法推断所有这些,但是如果数字的前导零始终不超过1,并且始终是一位数,并且结果永远不会大于原始数字,那么是的,这应该可以完美地工作。这会将结果填充到预定义的长度。OP提出了一种“保留”前导零的方法,这让我认为
05-1
应该打印为
04
,而
5-1
应该打印为
4
(而
00005-1
应该打印为
00004
)。OP还需要澄清他们是想保留所有的零,还是保持相同数量的位置(即
010-9
001
还是
01
?)。@octern这个答案中的方法适合我的情况,我只是在减去整数,所有的一位数都应该有一个前导0。@JakeRow123是的,我知道这是一个问题(示意性输出),尽管它似乎有点混淆了其他人。它也可以用以下内容填充:
$diff=sprintf(“%02d”,05-1)我无法推断所有这些,但是如果数字的前导零始终不超过1,并且始终是个位数,并且结果永远不会大于原始数字,那么是的,这应该可以完美地工作。
<?php
printf("Result: %02d", 04-1);
?>
Result: 03