将字符串转换为具有默认值的非负非零双精度值
我需要这样的东西..欢迎提出意见和建议,public double toPositiveDouble(string input, double def = 1){。双dv;。
如果 (!Double.TryParse(input, out dv){。
//无法解析,返回默认值。
dv = def;。
}。
else if ((dv + Math.Abs(dv)) == 0){。
//值为负,返回默认值。
dv = def;。
}。
}。
**** Hidden Message ***** Abs 调用而不是检查这是我的看法,扩展方法可能被认为是糟糕的形式。public static double ToPositiveDouble(此字符串输入,double def = 1)。
{。
双dv;。
如果 (!Double.TryParse(input, out dv)){。
//无法解析,返回默认值。
返回定义;。
}。
else if (dv。
{。
//值为负,返回默认值。
dv = def;。
}。
返回 dv;。
}。
。
用法。
字符串 d = “-36”;。
double dv = d.ToPositiveDouble(42.0);。
。
。
不,只是一个脑屁 不要觉得太糟糕,我还没有喝咖啡,意识到我不知道如何检查一个数字是否是负数,谷歌把我带到这里...
这时我想起了我的咖啡前无代码规则.. 怎么样: void Main(){ 。
控制台,WriteLine(is negative(-3.7));。
控制台,WriteLine(is negative(42));。
。
// - 。
string ds = " 36。
double dv = ToPositiveDouble(ds,42.0);。
控制台,WriteLine($ " { ds }:= > { dv } ");。
// - 。
ds = "-36 ";。
dv = topositedouble(ds,42.0);。
控制台,WriteLine($ " { ds }:= > { dv } ");。
。
// - 。
ds =。
dv = topositedouble(ds,42.0);。
控制台,WriteLine($ " { ds }:= > { dv } ");。
。
// - 。
ds = " 0。
dv = topositedouble(ds,42.0);。
控制台,WriteLine($ " { ds }:= > { dv } ");。
}。
。
public static double topositedouble(字符串输入,double def = 1) {。
双dv;。
return (Double,TryParse(输入、输出dv) &&!IsNegative(dv))?dv:def;。
。
}。
。
///零在这个世界上被认为是负数。
公共静态布尔值为负(T值)。
其中T : struct,IComparable {。
返回值,CompareTo(default(T)) 。
}。
。
。
真假 36:= > 36 -36:= > 42 := > 420:= > 42 修订:///零在这个世界上被认为是负数。
更好的算法会检查IsPo正()...并且它读起来也更好,ulul Main(){。
Console.WriteLine(IsPo正(-3.7));。
Console.WriteLine(正(42));。
Console.WriteLine(IsPo正(0.0));。
//-------。
字符串ds="36";。
双dv=ToPositiveDouble(ds,42.0);。
Console.WriteLine($"{ds}:=>{dv}");。
//-------。
ds="-36";。
dv=ToPositiveDouble(ds,42.0);。
Console.WriteLine($"{ds}:=>{dv}");。
//-------。
ds = "";。
dv=ToPositiveDouble(ds,42.0);。
Console.WriteLine($"{ds}:=>{dv}");。
//-------。
ds="0";。
dv=ToPositiveDouble(ds,42.0);。
Console.WriteLine($"{ds}:=>{dv}");。
}。
。
公共静态双ToPositiveDouble(字符串输入,双def=1){。
双dv;。
返回(Double.TryParse(输入,输出dv)&&IsPo正(dv))? dv: def;。
}。
公共静态bool IsPo正(T值)。
其中T:结构,I可比{。
返回value.CompareTo(默认(T))>0;。
}。
。
公共静态bool IsGregative(T值)。
其中T:结构,I可比{。
返回value.CompareTo(默认(T))。
}。
FalseTrueFalse36:=>36-36:=>42:=>420:=>42。
有趣的我曾考虑过写这样的东西,但我不想在第一次多重比较中依赖短路。我知道它应该一直都能工作,但它感觉像是一个黑客而不是一个设计的功能。 您好,<br>短路是&&运算符的设计功能,即使使用out参数,您也可以完全依赖它。
是的,如果改变了,世界上会有很多代码爆炸
链接无效,所以尝试
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-and-operator
我以前读过。我不知道……这可能是设计意图,但对我来说仍然像是一次黑客攻击。
另一方面,这是
公共双拓扑双(字符串输入,双定义=1){
双dv
<div>返回(双色锥波(输入,输出dv)&&dv>0)?dv:def
}
</div在我看来,它完成了所有必要的操作,并返回大于0的正值,如果输入无法转换为正值,则返回默认值<我真的认为我在这样一个琐碎的函数上花费了太多的时间
页:
[1]
2