C# 如何将字符串中的值从0,00更改为0.00
如何将字符串中的值从0,00更改为0.00?-只有数值,而不是所有字符“,”到“ 从C# 如何将字符串中的值从0,00更改为0.00,c#,.net,C#,.net,如何将字符串中的值从0,00更改为0.00?-只有数值,而不是所有字符“,”到“ 从 string myInputString=“\n120000000000000000000000000\n”; 到 string myInputString=“\n12.00000.00000.00000.00000.00000\n”; 谢谢您的回答,但我的意思是只更改数值,而不是将所有字符改为“” 我不想更改字符串 string = "<Attrib>txt txt, txt</Att
string myInputString=“\n120000000000000000000000000\n”;
到
string myInputString=“\n12.00000.00000.00000.00000.00000\n”;
谢谢您的回答,但我的意思是只更改数值,而不是将所有字符改为“” 我不想更改字符串
string = "<Attrib>txt txt, txt</Attrib><Attrib1>12,1223</Attrib1>";
string=“txt,txt121223”;
到
string=“txt.txt12.1223”;
但是这个还可以
string = "<Attrib>txt txt, txt</Attrib><Attrib1>12.1223</Attrib1>";
string=“txt,txt12.1223”;
如果除字符串中的数字外,未在其他任何位置使用,则可以使用以下内容:
string newStr = myInputString.Replace(",", ".");
试试这个:
Regex.Replace("attrib1='12,34' attrib2='43,22'", "(\\d),(\\d)", "$1.$2")
输出:attrib1='12.34'attrib2='43.22'ScarletGarden的答案是一个开始,但您需要了解数据中“数值”的完整上下文和语法 简短回答的问题是,这样的情况会被修改:
<elem1>quantity<elem2>12,6 of which were broken</elem2></elem1>
数量12,其中6个已损坏
是的,可能有输入错误(逗号后缺少空格),但人工输入的数据通常有此类错误
如果你加入更多的上下文,你很可能会减少误报。像这样的图案
([\s>]-?$?\d+),(\d+[\s<])
([\s>]-?$?\d+)(\d+[\s最佳方法取决于上下文。您正在解析XML吗?您正在编写XML吗。无论哪种方式,都与文化有关
如果您正在编写它,那么我假设您的区域性设置为使用逗号作为小数分隔符,而您不知道这一事实。首先,在Windows设置中更改您的区域性,使其更适合您的区域性和您的工作方式。其次,如果您正在为人类显示而编写数字,那么我将d将其保留为文化敏感型,以便适合阅读它的任何人。如果要由另一台机器解析,则可以使用不变的文化,如下所示:
12.1223.ToString(CultureInfo.InvariantCulture);
如果您正在阅读(我假设您正在阅读),则可以再次使用区域性信息。如果它来自人类来源(例如,他们在框中键入),则再次使用其默认区域性信息(默认为float.Parse)。如果它来自计算机,则再次使用不变量区域性:
float f = float.Parse("12.1223", CultureInfo.InvariantCulture);
当然,这假设文本是用不变的culuter编写的。但当你问这个问题时,它不是(除非你能控制它的编写,在这种情况下,上文建议使用不变的culuter来编写)。然后你可以使用一个不懂逗号的特定区域性来解析它:
NumberFormatInfo commaNumberFormatInfo = new NumberFormatInfo();
commaNumberFormatInfo.NumberDecimalSeperator = ",";
float f = float.Parse("12,1223", commaNumberFormatInfo);
我强烈推荐joel.neely的正则表达式方法或以下方法:
使用XmlReader读取所有节点
将double.TryParse与formatter=一个使用逗号作为十进制分隔符的NumberFormatInfo一起使用,以标识数字
使用XmlWriter编写新的XML
使用CultureInfo.InvariantCulture在该XML上写入数字
虽然理论上你可以使用正则表达式来实现这一点,但模式会很复杂,很难测试。ICR走上了正确的道路,你需要基于文化来实现这一点
你知道你的数字总是使用逗号作为小数点分隔符而不是句号吗?鉴于Navision是一家丹麦公司,看起来你可以这样做
如果是这样,您将需要遍历字符串中的XML文档,并重写数值。您似乎可以根据节点名确定这一点,因此这不会成为问题
转换数字时,请使用类似的方法:
以下是您想要做的:
internal double ConvertNavisionNumber(string rawValue)
{
double result = 0;
if (double.TryParse(rawValue, NumberStyles.Number, new CultureInfo("da-DK").NumberFormat, out result))
return result;
else
return 0;
}
这告诉TryParse()方法您正在转换来自丹麦语(dadk)的数字。调用该函数后,可以使用ToString()以本地格式(我假设是美国或加拿大)写出数字获取小数分隔符的句点。这还将考虑使用不同千位分隔符的数字(加拿大的1234.56写为1234.56,丹麦的1234.56)
将导致“4.43”
将导致“1234”。您缺少一个"我相信OP想要一个0.00表上数字的解决方案,而不仅仅是0.00表。这基本上解释了我的建议,但更为周密和清晰:事实上,我对你的答案投了更高的票,因为我不知道NumberFormatInfo。我写这篇文章是因为当我完成我的答案时,你的答案出现了,我在po之前阅读了刺痛我的。我在知道NumberFormatInfo之前使用了CultureInfo。
12.1223.ToString(CultureInfo.InvariantCulture);
float f = float.Parse("12.1223", CultureInfo.InvariantCulture);
NumberFormatInfo commaNumberFormatInfo = new NumberFormatInfo();
commaNumberFormatInfo.NumberDecimalSeperator = ",";
float f = float.Parse("12,1223", commaNumberFormatInfo);
internal double ConvertNavisionNumber(string rawValue)
{
double result = 0;
if (double.TryParse(rawValue, NumberStyles.Number, new CultureInfo("da-DK").NumberFormat, out result))
return result;
else
return 0;
}
ConvertNavisionNumber("4,43").ToString()
ConvertNavisionNumber("1 234").ToString()