一种在C#中编写大数字文字的方法
我有这样的方法:
Prefix GetPrefix(decimal value) { if(value > 11000000000000000000) return Prefix.CosmicBig; if(value > 1000000000000000) return Prefix.ReallyBig; if(value > 3000000000000) return Prefix.Big; if(value > 50000000) return Prefix.Okay; if(value > 750000) return Prefix.MostlyNormal; if(value > 750000) return Prefix.SoSo; if(value > 750) return Prefix.Small; return Prefix.MiserablySmall; }
确切的值并不重要。 重要的是它们有时会被更改(前缀用于绘图,一些文本区域在开发中会改变大小)。 我正在寻找一种以一种方式来编写这些文字的方法,这种方式很容易被人类改变它,而不必计算所有的零。 分隔符会很好。 我想写11 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000
,但这只是更难以管理。 使用Math.Pow()
可以做得更好,但我Math.Pow()
使用这样的计算来定义常量。
您可以为int
引入扩展方法:
750.Thousand(); 5.Million(); 100.Billion();
这些方法的实现很简单:
public static int Thousand(this int value) { return value * 1000; } public static int Million(this int value) { return value.Thousand() * 1000; } // etc.
确保为更大数字的方法返回适当的数据类型:
public static long Billion(this int value) { return value.Million() * 1000; }
不幸的是,您必须为要支持的每个积分或浮点类型编写这些方法。
拥有一整套这样的扩展方法可以让你以相对自然的方式表达你的大数字,即使最后它不只是全部为零:
100.Billion() + 30.Thousand() + 300 // == 100,000,030,300
如果你想获得幻想,你甚至可以考虑嵌套它们:
100.Billion(30.Thousand(300))
但我认为这会失去一些表现力,因为人们会想知道参数意味着什么。
仍然,实现将如下所示:
public static long Billion(this int value, long add) { return value.Million() * 1000 + add; }
使用这些扩展方法有一个小缺点:您的数字不再是编译时常量。 它们是在运行时计算的。 在绝大多数情况下,这应该不是问题。
而不是11000000000000000000
你可以使用11e18
。 用m
表示它是小数,所以11e18m
。
上述就是C#学习教程:一种在C#中编写大数字文字的方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1040945.html