将“129.70”之类的字符串转换为整数(在本例中为12970)时遇到了一些问题。这是我写的功能:
public static int valToInt(string v)
{
int tmp = (int)(double.Parse(v, new System.Globalization.CultureInfo("en-US")) * 1000);
return tmp / 10;
}
我做了1000次然后/ 10次技巧来解决这样的问题,并且它在99%的情况下运行良好,但129.70似乎是一个临界值,并转换为12969。 有没有办法在没有任何损失的情况下进行转换?作为货币价值,不会超过两位小数......
答案 0 :(得分:3)
为什么不从字符串中删除小数位,然后解析呢?
答案 1 :(得分:2)
public static int valToInt(string v)
{
return (int)(Decimal.Parse(v, new System.Globalization.CultureInfo("en-US")) * 100m);
}
你真的需要一个“偏移”int吗?考虑将值保留为十进制。
答案 2 :(得分:0)
我已经阅读了大量关于'为什么'整数和双精度比小数更精确'的评论,但简短的回答是使用小数。有关原因的一些参考:
答案 3 :(得分:0)
浮点值本质上具有精度限制。将它乘以1000将不会使其更精确,它根本无法准确地表示数字。
当您将数字转换为int
时截断数字时,您将夸大任何精度损失。如果在将值转换为int
之前该值类似于129699.99999999,则只需截取小数并最终得到129699.这也可以舍入到正确的值,但整数除法将被切断更多数据,给你12969而不是12970。
只需乘以100,然后转换为int
:
public static int valToInt(string v) {
return (int)Math.Round(Double.Parse(v, new System.Globalization.CultureInfo("en-US")) * 100.0);
}
答案 4 :(得分:0)
试试这么简单......
public static int valToInt(string v)
{
return int.Parse(v.Replace(".",""));
}