将字符串转换为十进制,保持分数

NET*_*ion 61 c# string decimal

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

string value = "1200.00";
Run Code Online (Sandbox Code Playgroud)

方法1

 var convertDecimal = Decimal.Parse(value ,  NumberStyles.AllowThousands
       | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);
Run Code Online (Sandbox Code Playgroud)

方法2

 var convertDecimal = Convert.ToDecimal(value);
Run Code Online (Sandbox Code Playgroud)

方法3

var convertDecimal = Decimal.Parse(value,
       NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 82

嗯......我无法重现这个:

using System;

class Test
{
    static void Main()        
    {
        decimal d = decimal.Parse("1200.00");
        Console.WriteLine(d); // Prints 1200.00
    }
}
Run Code Online (Sandbox Code Playgroud)

你确定你的代码的其他部分不是稍后规范化小数值吗?

万一它是文化问题,试试这个版本根本不应该取决于你的语言环境:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        decimal d = decimal.Parse("1200.00", CultureInfo.InvariantCulture);
        Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 尝试改变'.' 小数点分隔符为','.如果结果不同,那就是文化的东西. (4认同)

Øyv*_*hen 12

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

如果你试试

string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString();
Run Code Online (Sandbox Code Playgroud)

s将包含字符串"1200".

但是,如果您将代码更改为此

string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString("0.00");
Run Code Online (Sandbox Code Playgroud)

s将包含"1200.00"您希望它执行的字符串.

编辑

似乎我今天早上一直在脑力下降.我Parse现在添加了这些陈述.然而,即使我的第一个代码输出"1200.00",即使我预期它输出"1200".好像我每天都在学习一些东西,在这种情况下,显然是非常基本的东西.

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

  • @Øyvind - `decimal` 内部表示存储小数位零,即使它们在数学上无关紧要。所以虽然`decimal.Parse("1200.00") == decimal.Parse("1200")`,`.ToString()` 的值分别是“1200.00”和“1200”。OP 不需要在 `.ToString()` 方法中指定小数位。 (3认同)

小智 11

您好我有同样的问题,但很容易,只需这样做:

string cadena="96.23";

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

我认为这是因为接受C#的十进制数字带有","


Ram*_*esh 5

以下代码将值打印为1200.00.

var convertDecimal = Convert.ToDecimal("1200.00");
Console.WriteLine(convertDecimal);
Run Code Online (Sandbox Code Playgroud)

不确定你在期待什么?


小智 5

CultureInfo 类的使用对我有用,希望对您有所帮助。

    string value = "1200.00";
    CultureInfo culture = new CultureInfo("en-US");
    decimal result = Convert.ToDecimal(value, culture);
Run Code Online (Sandbox Code Playgroud)