Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串中的值从0,00更改为0.00_C#_.net - Fatal编程技术网

C# 如何将字符串中的值从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

如何将字符串中的值从0,00更改为0.00?-只有数值,而不是所有字符“,”到“

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()