我如何添加一个小数点之间的前9位数字和最后2位的值,是拉在行:$matchesLine[$key]=substr($line,166,11);
?作为,读取的值不包含小数点。
样本数据
输入:00023659819
所需输出:##
@Shlomtzion提供的脚本
<?php
$text = "I0023540987805R01 ABC GHI OLirrt 000000000000000100EA 0812160070451700 1098833 1990041300000001086000000000108600000000000996000000000032100000000000000000000000000000000000000000000000000000000000000000000006589000000000000000 P0012B
0000002032902R01 DEF JKL KLijuI 000000000000000100EA 0812160070451700 1029132 1997010800000002396000000000239600000120002326000000000000000000000000000000000000000000000000000000000000004560000000000000000000000000987600000000 A203SD ";
echo '<pre>';
$txt = explode("\n",$text);
echo '<pre>';
print_r($txt);
foreach($txt as $key => $line){
$subbedString = substr($line,2,11);
$searchfor = '02354098780';
//echo strpos($subbedString,$searchfor);
if(strpos($subbedString,$searchfor) === 0){
$matches[$key] = $searchfor;
$matchesLine[$key] = substr($line,166,11);
echo "Found in line : $key";
}
}
echo '<pre>';
print_r($matches);
echo '<pre>';
print_r($matchesLine);
您可以匹配166个字符,然后使用2个捕获组捕获9位和2位数字。
更换时,使用两组,中间添加一个点。
^.{166}\K(\d{9})(\d{2})
^
字符串的开始.{166}
匹配166个字符\K
忘记匹配到现在的东西(\d{9})(\d{2})
在组1中捕获9位,在组2中捕获2位正则表达式演示
替换为$1.$2
$text = "I0023540987805R01 ABC GHI OLirrt 000000000000000100EA 0812160070451700 1098833 1990041300000001086000000000108600000000000996000000000032100000000000000000000000000000000000000000000000000000000000000000000006589000000000000000 P0012B
0000002032902R01 DEF JKL KLijuI 000000000000000100EA 0812160070451700 1029132 1997010800000002396000000000239600000120002326000000000000000000000000000000000000000000000000000000000000004560000000000000000000000000987600000000 A203SD ";
echo '<pre>';
$txt = explode("\n",$text);
$pattern = "/^.{166}\K(\d{9})(\d{2})/";
foreach($txt as $key => $line){
echo preg_replace($pattern, "$1.$2", $line) . PHP_EOL;
}
输出
<pre>I0023540987805R01 ABC GHI OLirrt 000000000000000100EA 0812160070451700 1098833 19900413000000010860000000001.08600000000000996000000000032100000000000000000000000000000000000000000000000000000000000000000000006589000000000000000 P0012B
0000002032902R01 DEF JKL KLijuI 000000000000000100EA 0812160070451700 1029132 199701080000000239600000000023.9600000120002326000000000000000000000000000000000000000000000000000000000000004560000000000000000000000000987600000000
A203SD
这里有一种方法可以通过preg\u replace
:
$input = "00023659819";
$output = preg_replace("/(?=\d{2}$)/", ".", $input);
echo $output; // 000236598.19
我在打印格式上有一个小问题。如果数字不是整数,我想打印小数点后的2位数字(例如55.53467- 我拥有的代码是: 当然,它总是打印两位数。非常感谢
我有一个,我希望将用户的输入限制为纯数字或小数最多2位的数字。 基本上,我要求的是一个价格输入。 我想避免做正则表达式。有办法做到吗?
问题内容: 我已经阅读了很多stackoverflow问题,但似乎没有一个对我有用。我正在四舍五入。这是代码: 我得到的输出是:但我希望它是。我读到添加会有所帮助,但是如你所见,我没有设法使其工作。 输入和输出都必须是双倍是绝对必要的。 如果你更改上面代码的第4行并将其发布,那将是非常有用的帮助。 问题答案: 输出是 或如@Rufein所说 这也会为你做。
问题内容: 每次我想四舍五入到小数点后两位小数时,它都不想四舍五入…我怎么能将它四舍五入到小数点后两位零,那会给我92.00而不是92? 给我 但我想要 我使用了TO_CHAR,它起作用了 谢谢你们! 问题答案: 您可以尝试使用TO_CHAR函数来转换结果 例如 希望能帮助到你
问题内容: 我需要四舍五入,它应该是两位小数。 尝试了以下内容 28.27 但是期望值仅为28.26。 问题答案: 似乎您需要:
如有任何帮助,不胜感激,谢谢。