【问题标题】:How to convert a string to float with "tail"?如何将字符串转换为带有“tail”的浮点数?
【发布时间】:2011-05-30 09:37:52
【问题描述】:


我在将字符串转换为浮点数时遇到问题。

print gettype($value[$id]); //returns string

var_dump($value[$id]);//returns string '34,7140' (length=7)

$float = floatval($value[$id]); 

print gettype($float);//returns double

var_dump($float);//returns float 34

echo $float;//returns 34

我不明白为什么是“34”?为什么 $float 不是'34,7140'?
我怎样才能得到 $float = 34,7140 ?

【问题讨论】:

    标签: php string floating-point integer decimal


    【解决方案1】:

    问题是浮点数应该是英文格式,用. 分隔小数部分,而不是逗号。如果格式始终与单个逗号相同,请使用:

    $float = (float)str_replace(',', '.', $value);
    

    【讨论】:

    • 不会将千位分隔符转换为小数点(即 34.714)。应该完全删除逗号,不是吗?
    • @Ben 这对我来说不像是千位分隔符。
    【解决方案2】:

    PHP(和大多数其他计算机语言)中的小数分隔符是点,而不是逗号:

    更新: floatval() 在找到非数字字符后立即停止解析字符串。这是手册中的示例:

    <?php
    $var = '122.34343The';
    $float_value_of_var = floatval($var);
    echo $float_value_of_var; // 122.34343
    ?>
    

    如果您需要提取非英文格式的数字,您必须编写自己的代码。这是一个建议:

    function to_decimal($string, $decimal_separator=',', $thousand_separator='.'){
        $value = strtr($string, array(
            $decimal_separator => '.',
            $thousand_separator => '',
        ));
        if( !is_numeric($value) ){
            return NAN;
        }
        return floatval($value);
    }
    

    【讨论】:

      【解决方案3】:

      因为“34,7140”是一个字符串,因为它包含一个逗号字符。

      您可以使用$float = floatval(str_replace(',', '', $value[$id])); 删除逗号字符,或使用$float = floatval(str_replace(',', '.', $value[$id])); 将逗号替换为小数点,从而强制 PHP 将数字解释为 34.7140。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 2018-02-15
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多