Gia*_*971 3 c# string format formatting number-formatting
假设我有这段代码:
int i = 31240;
string Number = ((double)i / 1000).ToString("0.#k");
Run Code Online (Sandbox Code Playgroud)
我得到这个结果作为数字的字符串:31,2k
而现在,我想做的恰恰相反,就是把这个字符串"31,2k"带回31240甚至31200,但我不知道该怎么做......有什么想法吗?
有人说这是不可能的.但最后我找到了实现目标的完美方式.我为那些愿意知道的人发布解决方案.使用很简单,它允许进行两种转换:
int i = (int)(Double.Parse(Number.Substring(0, Number.Length - 1)) * 1000);
Run Code Online (Sandbox Code Playgroud)
我们删除kwith Number.Substring(0, Number.Length - 1),将其转换为double Double.Parse,乘以1000,最后转换为int.事情的顺序非常重要!我第一次这样做(int)Double.Parse(Number.Substring(0, Number.Length - 1)) * 1000是在乘之前转换为int(所以我得到31000而不是31200)
我要补充一点,如果我必须编写该代码,如果我使用Decimal.Parse而不是Double.Parse(因此我肯定会反对浮点的变幻莫测)我会睡得更好
我会添加一个更好的方法:
int i2 = int.Parse(Number.Substring(0, Number.Length - 1).Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, string.Empty)) * 100;
Run Code Online (Sandbox Code Playgroud)
这更有趣.我们删除k其他方法中的as,但是这次我们也,从中删除,string然后乘以100.
有趣的诀窍是,不是简单地(意大利俚语中的"bovinamente",如bovines所做的那样)用,空字符串替换,我们得到当前的小数分隔符(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator),我们用空字符串替换THAT.
显然,我们在组成原始字符串时使用了另一种文化(例如总是好的CultureInfo.InvariantCulture)我们会用它来获得NumberDecimalSeparator