因此,显然PHP的round()
将结果输出为根据当前语言环境设置格式化的字符串。 round( 10000.326, 1 )
可能会返回“1.000,3”,如果您打算立即显示结果,这样会很好,但如果您打算继续使用它,那就没那么好了。
php.net讨论暗示无法阻止round()
本地化输出。库中是否真的没有“纯”舍入函数返回int或float / double,以便结果可以用于算术运算,或者创建自己唯一的选项?
答案 0 :(得分:8)
round() 不 将结果输出为根据当前区域设置格式化的字符串:它返回 float ......并且没有本地化。
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
之后对结果的处理更有可能将其本地化。
你在哪里得到round()返回本地化字符串的印象?
答案 1 :(得分:0)
我不是太专家,但也许number_format()
可能会给你你需要的东西?根据评论它似乎没有使用区域设置,我知道它是圆的。
答案 2 :(得分:0)
假设舍入整数:
floor($value + .5);
并添加这样的精度(这是一位数):
$digits = 1;
floor($value * pow(10, $digits) + .5) / pow(10, d$igits);
答案 3 :(得分:0)
使用sprintf,如:
$val = sprintf('%.1f', 1000.326);
给出:1000.3
答案 4 :(得分:0)
这是自动转换为输出的字符串,可能会导致混淆。有a more direct question about that。一个例子对我有帮助:
<?php
setlocale(LC_NUMERIC, 'en_US');
echo 1.234; // 1.234
setlocale(LC_NUMERIC, 'et_EE.UTF-8');
echo 1.234; // 1,234
echo number_format( 1.234, 2, '.', '' ); // 1.23
?>
答案 5 :(得分:0)
round函数返回浮点数,但格式已本地化。
echo round(3.14159, 2);
setlocale(LC_ALL, 'fr_FR');
echo round(3.14159, 2);
这就是原始海报的意思。
我建议:
setlocale(LC_NUMERIC, 'en_US');
这会将小数点分隔符的本地化设置为英语(美国),并且将是一个句点。
答案 6 :(得分:-1)
如果你想强制它为int,你可以像这样输入:
$rnum = (int) round( 10000.326, 1 );
不确定这是否是你想要的。
您可以在此处获取更多信息http://php.net/manual/en/language.types.type-juggling.php
这是我所做的确认,我不确定你想要达到什么目的
但这可能会有所帮助
$var = (int) "1.000,3";
$var1 = "1.000,3";
if(is_string($var)) print "true";
else print "false";
if(is_int($var)) print "true";
else print "false";
if(is_string($var1)) print "true";
else print "false";
结果是:
答案 7 :(得分:-1)
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
你在哪里看到字符串输出???