提问者:小点点

用int替换float-如何进行本地化输入/输出?


这是其中的一个例子,我认为解决方案在谷歌上,但我甚至不知道搜索词是什么。 甚至是在StackOverflow上使用的wich标记。

情况:

彩车并不精确。 一个常见的技巧是使用整数进行数学运算,然后在输出过程中移位小数点:

如果您需要欧元的小数点后4位精度(在金融行业中并不少见),您可以有效地以毫欧元进行测量和计算。 然后在输出过程中,将小数左移,并截断最后2位:

因此,作为int存储,检索和处理的int1234567将作为/代表“123.45欧元”打印给普通最终用户。

问题:

但这与本地化有何互动? 。NET有一个很棒的部分,其中parse()toString()查看当前Windows用户区域性设置,以确定当前的十进制分隔符,组分隔符和组大小。

在。NET中似乎没有固定点类型,来为我做工作。

有没有什么fomat字符串组合可以用来表示“将小数点4左移到数字中,省略最后2位数字)”?对于任何int,F2只会在小数点后加上两个空0.“1234567.00欧元”比“123.45欧元”差几个数量级。

到目前为止我最好的主意是:

从用户区域性的NumberDecimalSeparatorNumberGroupSeparatorNumberGroupSizes中构建我自己的格式字符串--但是这是非常简单的,我似乎不应该这样做。 是不是有更好的一天去做呢,或者是我不得不去做那些有效的事情呢?


共1个答案

匿名用户

也许是这样的

using System.Globalization;

int n = 123456;
string price = "";
string priceW = "";

int i = 0;
foreach(char c in n.ToString())
{
i++;
if(i == n.ToString().Length - 1)
price += ".";
price += c;
}

float rPrice = float.Parse(price, CultureInfo.InvariantCulture.NumberFormat);
priceW = price + "€";