在php中将整数转换为十进制值

Posted

技术标签:

【中文标题】在php中将整数转换为十进制值【英文标题】:Converting a whole number to decimal value in php 【发布时间】:2021-06-17 18:59:41 【问题描述】:

我有一个 php 应用程序,它应该在 MariaDB 中插入一个货币值,它的表列设置为十进制 (10,2)

为了确保格式正确,我最初做了一个 echo 语句,以确保使用我认为应该是正确格式的结果....

number_format($variable-to-be-converted, 2, '.', '');

但是,当我分配格式转换时,我被告知(通过 mysqli 错误代码)十进制值不正确。我尝试在 13、10 和 4 之间调整小数位;唉,没有快乐。

任何想法将不胜感激 呸呸呸


include '../includes/dbt.php';
    
//make sure a residence tile was selected or send them back to /play/index.php
if (!isset($_GET['residence'])) 
    //code here
 else if (isset($_COOKIE['startingBal']))
    session_start();
    setCookie("residence", $_GET['residence'], time() + 86400);
    $residence = $_COOKIE['residence'];
                
    $balance    = $_COOKIE['startingBal'];
    $newBal     = '';
                
    switch ($residence) 
    case 'option1':
        $newBal = $balance - 3200;
        break;                          
    case 'option2':
        $newBal = $balance - 3000;
        break;                          
    case 'option3':
        $newBal = $balance - 800;
        break;
    case 'option4':
        $newBal = $balance - 700;
        break;                          
    default:
        $balance;
    
    $formattedNewBal    = number_format($newBal, '2','.','');
    $ingameStatsUpdate  =  "INSERT INTO ingameStats (`nickname`, `residence`, `newBal`) VALUES ('$nickname', '$residence', '$formattedNewBal')";
            
    if (mysqli_query($conn, $ingameStatsUpdate)) 
                
        echo "New record created successfully";
     else 
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    
        
    //unset starting balance cookie since now the database will keep track of the balance moving forward
    setCookie("startingBal", "", time() -3600);
                    
    // close connection 
    mysqli_close($conn);

    

【问题讨论】:

number_format($newBal,'2','.',''); 你有两个字符串。请改用number_format($newBal,2,'.','');。然而,这确实返回一个字符串。最好使用round() 并选择正确的舍入模式。以美分计算金钱也很常见,并且只使用数据库中的整数。 @KIKOSoftware 没关系,PHP 会在必要时自动将字符串转换为数字。 echo $ingameStatsUpdate; 显示什么? @Barmar INSERT INTO ingameStats (nickname, residence, newBal) VALUES ('', '', '') 这解释了很多:p 【参考方案1】:

有两个问题。

首先,您没有正确设置$residence。调用setcookie() 不会更新$_COOKIE 数组,因此$residence = $_COOKIE['residence']; 不会将其设置为您刚刚分配的值。见Why are my cookies not setting?

其次,你的default: case 没有设置$newBal。所以如果没有匹配的情况,$newBal 仍然有一个空字符串,这在 MySQL 中是一个无效的浮点值。

    session_start();
    $residence = $_GET['residence'];
    setCookie("residence", $residence, time() + 86400);
                
    $balance    = $_COOKIE['startingBal'];
                
    switch ($residence) 
    case 'option1':
        $newBal = $balance - 3200;
        break;                          
    case 'option2':
        $newBal = $balance - 3000;
        break;                          
    case 'option3':
        $newBal = $balance - 800;
        break;
    case 'option4':
        $newBal = $balance - 700;
        break;                          
    default:
        $newBal = $balance;
    

【讨论】:

以上是关于在php中将整数转换为十进制值的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中将二进制转换为整数?

在 PHP 中将十六进制颜色转换为 RGB 值

在 PHP 中将十六进制转换为 int64

在 JavaScript 中将整数转换为十六进制字符串

如何在 Android 中将颜色整数转换为十六进制字符串?

在 ASP.NET 中将具有小数语言中性的价格值转换为整数