首页 > 解决方案 > 如何使用 sprintf 输出小于 1 且没有前导小数位的浮点数?

问题描述

我正在尝试使用 sprintf 打印一个没有前零的浮点数。数字总是小于 1

0.12345 => .12345

我的尝试:

<?php
$string = sprintf('%0.6F',0.12345678);

我得到“0.123457”,但我需要“.123457”。我可以用 ltrim 做到这一点:

$string = ltrim(sprintf('%0.6F',0.12345678),'0');  //string(7) ".123457"

是否有只能用 sprintf 完成的特殊格式?

标签: phpprintf

解决方案


不可能像使用 and 的任何选项一样修剪小数点前的sprintf()float

sprintf() fF

double 参数被四舍五入并转换为样式 [-]ddd.ddd 中的十进制表示法,其中小数点字符后的位数等于精度规范。如果精度缺失,则取6;如果精度明确为零,则不会出现小数点字符。如果出现小数点,则在其前面至少出现一位数字。

http://www-sbras.nsc.ru/cgi-bin/www/unix_help/man-cgi?sprintf

作为替代ltrim()您可以使用substr

substr(sprintf('%.6f', 0.12345678), 1);

推荐阅读