将string转换为十进制,保留分数

我试图将1200.00转换为decimal ,但Decimal.Parse()删除.00 。 我已经尝试了一些不同的方法,但它总是移除.00 ,除非我提供一个不同于0的分数。

 string value = "1200.00"; 

方法1

  var convertDecimal = Decimal.Parse(value , NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol); 

方法2

  var convertDecimal = Convert.ToDecimal(value); 

方法3

 var convertDecimal = Decimal.Parse(value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); 

如何将包含1200.00string转换为包含1200.00decimal

嗯…我不能再现这个:

 using System; class Test { static void Main() { decimal d = decimal.Parse("1200.00"); Console.WriteLine(d); // Prints 1200.00 } } 

你确定这不是你的代码的其他部分正常化十进制值?

以防万一它是文化问题,请尝试这个版本不应该依赖您的语言环境:

 using System; using System.Globalization; class Test { static void Main() { decimal d = decimal.Parse("1200.00", CultureInfo.InvariantCulture); Console.WriteLine(d.ToString(CultureInfo.InvariantCulture)); } } 

我认为你的问题是显示小数时,而不是它的内容。

如果你试试

 string value = "1200.00"; decimal d = decimal.Parse(s); string s = d.ToString(); 

s将包含string"1200"

但是,如果你改变你的代码

 string value = "1200.00"; decimal d = decimal.Parse(s); string s = d.ToString("0.00"); 

s将包含string"1200.00"如你所愿。

编辑

看来我今天一大早就是脑残。 我现在添加了Parse语句。 但即使我的第一个代码将输出“1200.00”,即使我期望它输出“1200”。 好像我每天都在学习一些东西,在这种情况下显然是非常基本的东西。

所以无视这一个正确的答案。 在这种情况下,我们可能需要更多的代码来识别你的问题。

你好,我有同样的问题,但它是easly,只是这样做:

string cadena="96.23";

decimal NoDecimal=decimal.parse(cadena.replace(".",","))

我想这就是接受C#的十进制数的符号是​​用“,”

下面的代码打印值为1200.00。

 var convertDecimal = Convert.ToDecimal("1200.00"); Console.WriteLine(convertDecimal); 

不知道你在期待什么?

这是我为自己提出的解决scheme。 这已准备好作为命令提示符项目运行。 如果不是,你需要清理一些东西。 希望这可以帮助。 它接受几种input格式,如:1.234.567,89,1,234,567.89等

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; using System.Linq; namespace ConvertStringDecimal { class Program { static void Main(string[] args) { while(true) { // reads input number from keyboard string input = Console.ReadLine(); double result = 0; // remove empty spaces input = input.Replace(" ", ""); // checks if the string is empty if (string.IsNullOrEmpty(input) == false) { // check if input has , and . for thousands separator and decimal place if (input.Contains(",") && input.Contains(".")) { // find the decimal separator, might be , or . int decimalpos = input.LastIndexOf(',') > input.LastIndexOf('.') ? input.LastIndexOf(',') : input.LastIndexOf('.'); // uses | as a temporary decimal separator input = input.Substring(0, decimalpos) + "|" + input.Substring(decimalpos + 1); // formats the output removing the , and . and replacing the temporary | with . input = input.Replace(".", "").Replace(",", "").Replace("|", "."); } // replaces , with . if (input.Contains(",")) { input = input.Replace(',', '.'); } // checks if the input number has thousands separator and no decimal places if(input.Count(item => item == '.') > 1) { input = input.Replace(".", ""); } // tries to convert input to double if (double.TryParse(input, out result) == true) { result = Double.Parse(input, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.InvariantCulture); } } // outputs the result Console.WriteLine(result.ToString()); Console.WriteLine("----------------"); } } } } 

使用这个例子

 System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("en-GB",true); decimal currency_usd = decimal.Parse(GetRateFromCbrf("usd"),culInfo); decimal currency_eur = decimal.Parse(GetRateFromCbrf("eur"), culInfo); 

即使打印表示法不是您所期望的,值也是一样的:

 decimal d = (decimal )1200.00; Console.WriteLine(Decimal.Parse("1200") == d); //True 

你可以尝试在你的程序中调用这个方法:

 static double string_double(string s) { double temp = 0; double dtemp = 0; int b = 0; for (int i = 0; i < s.Length; i++) { if (s[i] == '.') { i++; while (i < s.Length) { dtemp = (dtemp * 10) + (int)char.GetNumericValue(s[i]); i++; b++; } temp = temp + (dtemp * Math.Pow(10, -b)); return temp; } else { temp = (temp * 10) + (int)char.GetNumericValue(s[i]); } } return -1; //if somehow failed } 

例:

 string s = "12.3"; double d = string_double (s); //d = 12.3 

这是你必须做的。

 decimal d = 1200.00; string value = d.ToString(CultureInfo.InvariantCulture); // value = "1200.00" 

这对我有效。 谢谢。