Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:数学函数_C#_Double - Fatal编程技术网

C#:数学函数

C#:数学函数,c#,double,C#,Double,我有一个列表 在结果中,如果该值没有任何浮点,则无需添加.0 请帮我做这个List lst=new List(){1.0,2.409,3.0}; List<Double> lst=new List<Double>() { 1.0,2.409,3.0}; List<string> output = lst.Select(val => val.ToString("0.######")).ToList(); List outp

我有一个
列表

在结果中,如果该值没有任何浮点,则无需添加
.0

请帮我做这个

List lst=new List(){1.0,2.409,3.0};
        List<Double> lst=new List<Double>() { 1.0,2.409,3.0};
        List<string> output = lst.Select(val => val.ToString("0.######")).ToList();
List output=lst.Select(val=>val.ToString(“0.########”);

应该做你想做的事

如果你使用的是.Net 3.5,你可以使用Linq:

lst.Select(n => String.Format("{0:0.###}", n));
否则,您可以长期这样做:

var output = new List<string>();

foreach (int number in lst)
{
    output.Add(String.Format("{0:0.###}", number));
}
var输出=新列表();
foreach(lst中的整数)
{
Add(String.Format(“{0:0.}”,number));
}

写得更少….

以下是我对此的看法,它不依赖于特定于区域性的分数分隔符,也不依赖于固定的小数位数:

var result = lst.Select(
  n => { 
     double truncated = Math.Truncate(n);

     if(truncated == n) {
       return truncated.ToString("0");
     } else {
       return n.ToString();
     }
  }
);

这对OP的例子很有效,但不是“一般”,请看我的答案。@arul:我意识到我选择的字符串格式对于OP的问题是正确的,但不是一般的,但我回答OP的问题:)回答是为了回答,而不是正确性。。。阿鲁尔:我想你可能错了。format方法只是指定应该使用多少小数等,但我认为它将使用底层区域性。Ref:@Tomas Jansson:“特定于区域性的分数分隔符”与另一个(已删除?)答案相关。未删除:)。我真的不明白为什么要这样做,
String.Format
应该为您处理特定于区域性的部分。还是我遗漏了什么?@Tomas Jansson:Yes:)有另一个答案叫
n=>n.ToString().TrimEnd('.','0')
@arul:这个解决方案是完全错误的:)。但是我不认为你的建议是解决这个问题的方法,你应该利用
String.Format
方法。请注意,我并没有说你的解决方案是错误的,只是对复杂的:)@Tomas Jansson:其实并不复杂。
{0:0.####}
的格式将
0.0001
转换为
0
,这是不正确的,并且容易出现更多此类错误。@arul:我没想到的那部分。但是你可以用更多的括号,对吗?如果你问我,使用格式化方法会更容易阅读,我同意你的解决方案没有那么复杂。
var output = new List<string>();

foreach (int number in lst)
{
    output.Add(String.Format("{0:0.###}", number));
}
List lst = new List { 1.0, 2.409, 3.0 };
List newlist =  lst.Select(val => val.ToString()).ToList();
var result = lst.Select(
  n => { 
     double truncated = Math.Truncate(n);

     if(truncated == n) {
       return truncated.ToString("0");
     } else {
       return n.ToString();
     }
  }
);