intからdoubleに変換する

私は3600で割って時間に変換している整数(秒を表す)を持っています。次に値をプロパティ(int型)に格納します。値に小数点が含まれている場合は、キャストして変換します。しかし、プロパティに値を代入しようとすると、エラーが発生します。「暗黙的に型 'decimal'を 'int'に変換できません。」ここに私のコードです:

var p = ((Hours.Duration)/3600.0);
(Hours.Duration) = p;

しかしながら、

Hours.Duration =  (Hours.Duration)/3600

うまく動作し、 int に丸められます。私は間違って何をしていますか?

0
どの言語?
追加された 著者 ThomasW,
同様の質問ここ
追加された 著者 abhinav,
私はC#を使用しています....
追加された 著者 Premanshu,

4 答え

decimal p = ((Hours.Duration)/3600);
(Hours.Duration) = p;

p は10進数であり、Hours.Durationは整数であるためエラーが発生しています。明示的キャストなしでintにdecimalを割り当てることはできません。

(Hours.Duration) = (int)p;

Hours.Duration integer の場合、3600も整数で、整数の除算があります。つまり、10進数値が失われます。例えば整数の除算で 7/2 = 3 になります。答えが3.5になるようにするには、除算に 7.0/2 = 3.5 または 7/2.0 = 3.5 という少なくとも10進数が1つ必要です。

2
追加された
Hours.Durationのタイプは何ですか? @プレマンスフ
追加された 著者 Zohaib,
10進数の値をint変数に格納することはできません。 Hours.Durationのタイプを変更する必要があります。つまり、int変数に0.5を保存することはできません。 @プレマンスフ
追加された 著者 Zohaib,
この変換は実際にはできません。そして、私はモデルクラス(MVC)でこれらを試していたので...最終的に私の見解で変更が行われました。
追加された 著者 Premanshu,
実際には、データベースには秒(int)を格納し、ユーザーには時間として表示します(小数でも構いません)。私は1,2などを使ってテストを行っていましたが、10進数では拒否します。継続的な応答に多くの感謝..
追加された 著者 Premanshu,
タイプはint ..です
追加された 著者 Premanshu,
Hours.Duration = 1800の場合、p = 0.5 ..どのようにその値をHours.Durationに割り当てるか。 2行目の明示的な変換についてConvert.ToDecimal((Hours.Duration))= p;エラーは、割り当てのlhsは変数、プロパティ、インデクサでなければならないと言います。
追加された 著者 Premanshu,

試してください:

Hours.Duration = Convert.ToInt32(p);
1
追加された

pを10進数として定義しないでください。また、問題は、部分的な時間も含めたい場合です(たとえば、4000/3600の結果が1または2の場合)。だからあなたは直接書くことができます

Hours.Duration/= 3600;

またはあなたがまた部分的な時間を数えたい場合

Hours.Duration = Hours.Duration/3600 + ((Hours.Duration % 3600 > 0)?1:0);

正しい丸めが必要な場合

Hours.Duration = Hours.Duration/3600 + ((Hours.Duration % 3600 >= 1800)?1:0);

0
追加された
ありがとうIvo ...私はそれを確認し、あなたに結果を知ってみましょう...あなたの熱意を歓迎....乾杯
追加された 著者 Premanshu,
Imは時間だけを表示することができました(正確には小数点以下2桁まで)。
追加された 著者 Premanshu,
変数Hours.Durationはint型のプロパティです。
追加された 著者 Premanshu,
時間単位は1になります。しかし、小数点はどうですか?4500は4500/3600 = 1.25となりますので、小数部を追加します(900秒余りの後分割)???私は、キャスト後にint型に10進値を代入することはできないと考えています。さらに多くの文献が確かに私を助けます。あなたの懸念を感謝します。
追加された 著者 Premanshu,
ありがとう@Ivo ... Hours.Durationはintであることが分かります。したがって、小数部を追加するとエラーが発生します。しかし、多くの返信のおかげで。
追加された 著者 Premanshu,
小数部を表示する必要がある場合は、間違いなくHours.Durationタイプを変更する必要があります。または、時間:分:秒の形式を考えてみてください。
追加された 著者 Ivo Peterka,
構造体を整数値に拡張するDurationHは時間、DurationMは分、DurationSは秒を表します。次に、 int reminder = Hours.DurationH%3600;を実行します。 Hours.DurationH/= 3600; Hours.DurationM =リマインダー/ 60;時間:分:秒:60分; 最後に結果を時間形式で表示します。分:秒これは私が最善の方法と思います。
追加された 著者 Ivo Peterka,
その場合、Hours.Duration型を10進数に変更し、表示されたときに正しく書式設定されていることを確認してください(書式設定文字列に{0:F2}など)。
追加された 著者 Ivo Peterka,
または、Hours.Duration.ToString( "F2"、Culture.CurrentCulture)を10進数のHours.Durationで使用します。
追加された 著者 Ivo Peterka,

このコードを使用することができます:

int vIn = 0;
double vOut = Convert.ToDouble(vIn);

Here is a very handy convert data type webpage for those of others: Convert decimal to int in C#

0
追加された