2017-03-06 16 views
0

したがって、私のデータベーステーブルから列inoutの結果を得るためにこのクエリがあります。浮動小数点値の加算と減算

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

ここで、私は静的な数値をとる必要があります。 100に変更し、inを追加し、その静的番号からoutを削除します。

だから、これは私が試したものです:

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

<table> 
    <cfset balance = 100> 
    <cfloop query="getInfo"> 

    <cfset balance = balance + in - out> <!--- THIS IS WHAT I TRIED ---> 

    <tr> 

     <td>#in#</td> 
     <td>#out#</td> 
     <td>#balance#</td> 

    </tr> 
    </cfloop> 
</table> 

あなたが見ることができるように、私はこのコード<cfset balance = 100 + in - out>を設定しました。基本的に私がしようとしているのは、元のバランスの値を100とし、inの値を加算し、outの値を減算して新しいバランスとして保存することです。

ただし、The value '' cannot be converted to a number.というエラーが表示されています。

私はinとoutの値をデータベースに浮動させるように設定しました。

どこが間違っていますか?彼らは重要な言葉が

また上の数学を行うことを検討するかもしれないように、彼らが見えるので、あなたがNULL条件

<cfquery name="getInfo" datasource="testing"> 
    select ISNULL([in], 0) AS [in], ISNULL([out], 0) AS [out] 
    FROM test 
</cfquery> 

をカバーするためにクエリを更新する必要があり

+1

通貨を表すために 'float'のようなおおよその型を使用しないでください。代わりに 'decimal'のような正確なデータ型を使用してください。 – Leigh

答えて

5

はまた、私はinout周りの角括弧を置きますDBでは、より良いパフォーマンスを得るかもしれません。

+0

データベースにデフォルト値の0を追加しました。それでも動作しません。 – gosi123

+0

'balance'のスコープを' variables.balance'にしてみてください。また、すべての後にまだどのフィールドが空白になっているのかを判断します。私は '' –

+4

RE:*を使ってデータベースのデフォルト値0を追加することをお勧めします。*これはJamesが提案したものではありません。通常、 'default'値を適用すると、テーブルに挿入された* new *レコードにのみ影響します。既存のレコードの値を変更するには、UPDATEが必要です。代わりに、クエリ結果を変更するだけです。 1つの方法は 'COALESCE()'、 'ISNULL()'などのデータベース関数を使って 'null'の代わりにゼロ(0)を返すことです。正確な構文はDBMSによって異なります。もう一つは、数値以外の値をゼロ(0)に変換するCFコードで 'VAL()'を使うことです。 – Leigh

関連する問題