C#将格式化的字符串(31.2k)转换回数字(31240)
作者:互联网
假设我有以下代码:
int i = 31240;
string Number = ((double)i / 1000).ToString("0.#k");
我得到此结果作为数字的字符串:31,2k
现在,我想做相反的事情,那就是将这个字符串“ 31,2k”带回31240甚至31200,但是我不知道该怎么做…
任何想法?
有人说那是不可能的.
但是最后,我找到了实现目标的完美方法.我将解决方案发布给可能愿意知道的人.
使用很简单,它允许进行两种转换:
>千,例如:45831< => 45.8万< => 45831
>百万,例如:123852376< => 123,5m< => 123852376
解决方法:
int i = (int)(Double.Parse(Number.Substring(0, Number.Length - 1)) * 1000);
我们用Number.Substring(0,Number.Length-1)删除k,用Double.Parse将其转换为double,乘以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;
这更有趣.和其他方法一样,我们删除了k,但是这次我们也从字符串中删除了,然后乘以100.
有趣的技巧是,用一个空字符串代替,而不是简单地(用意大利语用意大利语说“ bovinamente”)替换一个空字符串,我们得到当前的十进制分隔符(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator),然后用一个空字符串.
显然,在组合原始字符串时是否使用了另一种区域性(例如,始终保持良好的CultureInfo.InvariantCulture),我们将使用该区域性来获取NumberDecimalSeparator
标签:format,number-formatting,string,c,formatting 来源: https://codeday.me/bug/20191102/1988945.html