将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.00
的string
转换为包含1200.00
的decimal
?
嗯…我不能再现这个:
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"
这对我有效。 谢谢。