乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 182|回复: 10

将字符串转换为具有默认值的非负非零双精度值

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-6-17 12:16:33 | 显示全部楼层 |阅读模式
我需要这样的东西..欢迎提出意见和建议,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;。
}。
}。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2017-6-17 12:43:02 | 显示全部楼层
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);。


回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-6-17 13:09:41 | 显示全部楼层
不,只是一个脑屁
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2017-6-17 14:50:37 | 显示全部楼层
不要觉得太糟糕,我还没有喝咖啡,意识到我不知道如何检查一个数字是否是负数,谷歌把我带到这里...
这时我想起了我的咖啡前无代码规则..
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-6-17 15:46:32 | 显示全部楼层
怎么样:    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 := > 42  0:= > 42   修订:///零在这个世界上被认为是负数。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-6-17 16:37:52 | 显示全部楼层
更好的算法会检查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。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-6-18 08:45:34 | 显示全部楼层
有趣的我曾考虑过写这样的东西,但我不想在第一次多重比较中依赖短路。我知道它应该一直都能工作,但它感觉像是一个黑客而不是一个设计的功能。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2017-6-18 10:40:17 | 显示全部楼层
您好,<br>短路是&&运算符的设计功能,即使使用out参数,您也可以完全依赖它。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-6-18 21:32:19 | 显示全部楼层

是的,如果改变了,世界上会有很多代码爆炸
链接无效,所以尝试
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-and-operator
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-6-18 22:43:40 | 显示全部楼层
我以前读过。我不知道……这可能是设计意图,但对我来说仍然像是一次黑客攻击。
另一方面,这是
公共双拓扑双(字符串输入,双定义=1){
双dv
<div>返回(双色锥波(输入,输出dv)&&dv>0)?dv:def
}
</div在我看来,它完成了所有必要的操作,并返回大于0的正值,如果输入无法转换为正值,则返回默认值<我真的认为我在这样一个琐碎的函数上花费了太多的时间
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 13:54 , Processed in 0.162267 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表