在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
is4
not04
tho0.4
is0.4
因此,如果您需要整数中的前导0
,请降低10
以填充它
不,我不认为PHP本机会保持领先的0,除非它是一个浮点。在PHPs头脑中,
4
is4
not04
tho0.4
is0.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