2011-01-31 2 views
0

を追加させる私はCSV形式で、次の値がある -小数点CSV値の値が誤って

事実を、私が送信しています

10.5、11.5

15.5、16.5

タクトこれらはWebサービスに送信され、データベースに格納されます。 Webサービスからの応答は、それぞれの列の値の合計と等しくなければなりません。

つまり、 'fact'の場合、レスポンスバックは10.5 + 15.5したがって= 26、 、 'tact' 11.5 + 16.5 = 28.

しかしdeciamlポイントは、それは私が見つけるために、次のコードを使用しています「事実」= 25、= 27

「タクト」を取得した後の結果応答で問題が発生して数字を無視しているように見えますcsvの適切な値をオブジェクト配列の位置に設定する -

upDateFeed[i] = new webservice.upDateFeed(); 

upDateFeed[i].fact = (int)System.Convert.ToDouble(el.Descendants("var").Where(x => (string)x.Attribute("name") =="fact").SingleOrDefault().Attribute("value").Value); 
upDateFeed[i].tact = (int)System.Convert.ToDouble(el.Descendants("var").Where(x => (string)x.Attribute("name") =="tact").SingleOrDefault().Attribute("value").Value); 

deciamlポイントを考慮して数字を取得するにはどうすればよいですか?

お時間をいただきありがとうございます。

+0

「エル」とは何ですか? 'webservice.upDateFeed()'とは何ですか? – tster

答えて

3

明示的にdoubleintに変換していますが、どうなるでしょうか? :)

+0

私は同意します。あなたはunboxをして(double)not(int)にする必要があります。 – Lane

+0

@Lane - OPが 'Convert.ToDouble'関数を使用しているので、アンボックスは必要ありません。 – James

+0

@Laneの場合、 'ToDouble'はすでに' double'を返しているので、明示的な変換の必要はありません。 –

0

Webサービスでのみintを受け入れる場合は、必要な数値を取得できません。それは、常にupDateFeed [i]は.fact

upDateFeed [i]は.tact

両方がintにあなたがやっているキャストは意味、小数のスペースを持っているタイプである必要が

を丸められます小数は削除されています。私は、webserviceは整数だけを受け取り、小数点は受け付けないからです。その場合、Webサービスを変更する必要があります。

+0

入力していただきありがとうございます@Kev、私はいくつかのことを試してみました、そして、あなたが言ったことに私はいつも戻ってきました - 私は、Webサービスが事実とタクトを整数として受け入れることを誓っているので、それ以外に何かを送る? – Ebikeneser

+0

はい、それは私が期待していることです、あなたがつまんでいるWebサービスを変更できない場合 –

1

あなたはdouble型をintにキャストしています。つまり、浮動小数点精度はすべて削除されます。 upDateFeedクラスを更新する必要があります。intの代わりにdoubleが必要です。キャストする必要はありません。

また、読みやすさの観点からは、コードを少し分けて、実際に何をしているのかがはっきり分かります。

+0

私はupDateFeedクラスが期待できるものを制御できません。これは、私が使用しているWebサービスの作者によって設定されています。 – Ebikeneser

+0

@Lambo - プロパティ 'fact' /' tact'が確実に整数であることを確認できますか? – James

+0

はい、絶対にこれらの数値を格納するテーブルは整数としてそれらを格納します。 – Ebikeneser

関連する問題