Laravel 8中如何将提交的小数转换为英文单词形式展示
实现方案
你不需要修改现有的提交、存储逻辑,只需要新增数字转英文拼写的转换逻辑,在展示层调用即可,具体步骤如下:
步骤1:添加数字转英文的辅助函数
在app目录下新建Helpers文件夹,在文件夹内创建NumberToWords.php文件,写入以下代码:
<?php function numberToWords($number) { $digits = [ 0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', 6 => 'six', 7 => 'seven', 8 => 'eight', 9 => 'nine', 10 => 'ten', 11 => 'eleven', 12 => 'twelve', 13 => 'thirteen', 14 => 'fourteen', 15 => 'fifteen', 16 => 'sixteen', 17 => 'seventeen', 18 => 'eighteen', 19 => 'nineteen', 20 => 'twenty', 30 => 'thirty', 40 => 'forty', 50 => 'fifty', 60 => 'sixty', 70 => 'seventy', 80 => 'eighty', 90 => 'ninety' ]; $integer = floor($number); $decimal = round(($number - $integer) * 100); // 处理整数部分 if ($integer < 21) { $integerStr = $digits[$integer]; } elseif ($integer < 100) { $integerStr = $digits[floor($integer / 10) * 10]; if ($integer % 10 > 0) { $integerStr .= ' ' . $digits[$integer % 10]; } } // 如需支持更大的数字,可自行扩展百、千等位数的转换逻辑 // 处理小数部分 $decimalStr = ''; if ($decimal > 0) { $decimalStr = ' point'; foreach (str_split((string)$decimal) as $d) { $decimalStr .= ' ' . $digits[$d]; } } return trim($integerStr . $decimalStr); }
步骤2:注册辅助函数
打开项目根目录的composer.json文件,找到autoload配置块,添加files项注册辅助函数:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/Helpers/NumberToWords.php" ] },
保存后在项目根目录执行命令使配置生效:composer dump-autoload
步骤3:修改列表页展示逻辑
打开index.blade.php文件,找到原来输出数字的代码:
<td>{{ $product->detail }}</td>
修改为调用辅助函数转换后输出:
<td>{{ numberToWords($product->detail) }}</td>
优化可选:使用模型访问器
如果你需要在多个页面用到转换后的文本,可以在Product模型中添加访问器,无需重复调用函数:
// 在Product.php模型中添加以下方法 public function getDetailWordAttribute() { return numberToWords($this->detail); }
之后所有地方都可以直接通过$product->detail_word获取转换后的文本。
内容的提问来源于stack exchange,提问作者Shahed Khan
相关产品推荐
相关产品推荐

