プロが教える店舗&オフィスのセキュリティ対策術

public decimal PlanPrice
{
get
{
int x = 0;
decimal a;
a = (decimal)x;
return Settings.Default.PlanPrice;
}
}
public decimal ResultPrice
{get;private set;}
public decimal SubtractPrice
{
get
{
return ResultPrice - PlanPrice;
}
}
public decimal TotalPrice
{
get
{
decimal p =
_previousModel == null ?
0 :
_previousModel.TotalPrice;
return p + SubtractPrice ;
}
}
public decimal PercentComplete
{
get
{
return ResultPrice / PlanPrice;
}
}

↑のコードで達成率をResultPrice / PlanPriceで出そうと思ったのですが1月のように値が出ないのと、decimal型で書いているのに少数が出ないのはどうしてでしょうか?

「Visual Studio C#」の質問画像

質問者からの補足コメント

  • うーん・・・

    そうです。

    public decimal PercentComplete
    {
    get
    {
    return ResultPrice / PlanPrice;
    }
    これだけでは達成率はdecimalにならないんですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/21 22:24
  • 確かに
    StringFormat=##¥,###¥,###
    このようになってましたが、少数第一位まで表すにはどのような書式にすれば良いのですか?


    PercentCompleteはratioに変換します。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/07/21 23:13

A 回答 (4件)

https://oshiete.goo.ne.jp/qa/9843253.html

doubleがdecimalになっても同じです。

「public decimal PercentComplete」自体は小数点以下まで計算した値を返しているはずです。
なので、この部分だけ見せられても、原因はわかりません。

・PercentCompleteは 比率であって、百分率にはなっていないように見えます。
これを 100倍にするような計算をしているはずです。
それが int p = PercentComplete * 100 ; みたいにintで受けたりしてませんか?

・その表を表示するのに、どんなコントロールを使っているかがわかりませんが、
Columns[達成率].Format ="#,###,###" ;
みたいな感じの書式設定されていたりしませんか?
(.Netの書式設定がそのまま使えるとして)
https://msdn.microsoft.com/ja-jp/library/0c899ak …
上記書式だと、 小数点以下は表示されないし、 #の機能により整数部が 0 の場合は表示されません
1月が空欄なのは、 小数点以下非表示、整数部の0も表示されない、という状態なのでは
この回答への補足あり
    • good
    • 1
この回答へのお礼

問題解決しました。
細かく教えていただきありがとうございます。

お礼日時:2017/07/22 15:15

> StringFormat=##¥,###¥,###


> このようになってましたが、少数第一位まで表すにはどのような書式にすれば良いのですか?


「c# 書式 桁数」などで検索すればいくらでも情報が取得できると思います

・書式を指定して数値を文字列に変換する
 https://dobon.net/vb/dotnet/string/inttostring.h …
・カスタム数値書式指定文字列
 https://msdn.microsoft.com/ja-jp/library/0c899ak …



double num = 1234.567;
Console.WriteLine(num.ToString("###")); // 1235
Console.WriteLine(num.ToString("###.0")); // 1234.6
Console.WriteLine(num.ToString("###.00")); // 1234.56
Console.WriteLine(num.ToString("###.000")); // 1234.567
Console.WriteLine(num.ToString("###.0000")); // 1234.5670

num = 0.1234;
Console.WriteLine(num.ToString("##.0%")); // 12.3%
    • good
    • 1
この回答へのお礼

解決しました

解決ました。
参考分ありがとうございました。

お礼日時:2017/07/22 15:11

PercentComplete()の呼び元で、小数がでないようにしてるか、結果が小数なしなんじゃないですか。


利用しているコンポーネントが何なのかわかりませんが、それに起因しているという可能性もあります。
decimalを文字に変換してるなら、ToString("F2")などとして小数桁を固定させないと思い通りの動作はしないのでは。
    • good
    • 1

達成率って


public decimal PercentComplete
ってやつですか?

ResultPrice / PlanPrice
ここの計算でint型に変換されちゃってるのではないでしょうか?
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!