小数在c#中变成不正确的分数
Posted
技术标签:
【中文标题】小数在c#中变成不正确的分数【英文标题】:Decimal numbers are turning into incorrect fractions in c# 【发布时间】:2021-11-22 22:29:47 【问题描述】:我正在输入这个:
List<double> weightItems = new List<double> 0.23, 0.18, 0.18, 0.27, 0.14;
当我这样输出时:
objStr += "Weights: [" + String.Join(",", weightItems) + "]\n";
return objStr;
我得到这个作为输出: 权重:[0/23,0/18,0/18,0/27,0/14]
不知道为什么我会得到这个。感谢您的帮助
【问题讨论】:
编辑前贴出的代码不会编译。编辑后发布的代码返回此结果:Weights: [0.23,0.18,0.18,0.27,0.14]。 对我来说看起来不错。我在输出的字符串中看到了正确的结果。 您可能想在运行时检查NumberFormatInfo.NumberGroupSeparator
的实际值。另外,这个问题看起来很相关***.com/questions/19631640/…
我需要使用权重列表并使用它们进行计算。如何确定计算是否使用 0.23 而不是 0/23?
可能是因为当前线程的文化使用“momayyez”作为小数分隔符,可能显示为斜线。尤其是在波斯文化中(至少他们在这里是这么说的:***.com/questions/49807906/…
【参考方案1】:
首先,让我们稍微修改一下这段代码以便编译:
List<double> weightItems = new List<double> 0.23, 0.18, 0.18, 0.27, 0.14 ;
var objStr = "Weights: [" + String.Join(",", weightItems) + "]\n";
Console.WriteLine(objStr);
这应该返回以下内容:
权重:[0.23,0.18,0.18,0.27,0.14]
如果这不起作用,可能是因为您的 CultureInfo 设置错误。
要解决此问题,您应该在使用 String.Join() 之前包含此行
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
如果您想重现此问题 - 请使用 "fa-Ir"
代替同一行
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fa-Ir");
这会将您的结果更改为以下内容:
权重:[0/23,0/18,0/18,0/27,0/14]
lidqy在cmets发了相关链接
lidqy's link
【讨论】:
【参考方案2】:如果您担心这些值被破坏,您可以轻松地使用 '.' 显示这些值。通过指定例如 InvariantCulture(或任何其他使用“.”小数分隔符的文化)作为小数点。
//1. Specifying culture in explicit string format
List<double> weightItems = new List<double> 0.23, 0.18, 0.18, 0.27, 0.14 ;
var str = "Weights: [" + string.Join(",", weightItems.Select(d => d.ToString(CultureInfo.InvariantCulture))) + "]\n";
Console.WriteLine(str);
//2. Specifying thread culture and using it in implicit string format
List<double> weightItems = new List<double> 0.23, 0.18, 0.18, 0.27, 0.14 ;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
var str = "Weights: [" + string.Join(",", weightItems) + "]\n";
Console.WriteLine(str);
两个输出:"Weights: [0.23,0.18,0.18,0.27,0.14]"
【讨论】:
以上是关于小数在c#中变成不正确的分数的主要内容,如果未能解决你的问题,请参考以下文章
解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)