对字符串调用.ToString()以更改其格式

本文关键字:格式 字符串 调用 ToString | 更新日期: 2023-09-27 18:26:39

为了能够动态更改应用程序中的值,我将其存储在resx文件中。当然这是一根绳子。

MaximumSpend    -    5000

在我的代码中,我执行int.Parse(MyApp.MaximumSpend)。现在,我可以在一个地方更改最大支出,应用程序可以处理它,而无需进一步更改。

在前端,我想显示价值为5000美元。如果这是一个int,我会做

MyInt.ToString("0#,##0")

但它已经是一根绳子了。我可以转换成int,然后调用它的.ToString(),但这似乎很浪费。

有没有更好的方法将我的前端代码中的5000更改为5000?还是改为int并返回是最好的方式?

更新:谢谢大家。我已经完成了int.parse,然后返回到字符串。

$('#MaximumSpend').text("@int.Parse(MyResources.MyNamespace.MaximumSpend).ToString("##,###")");

我将来会为此使用web.config(我已经为其他项目做过了,只是不是那些最初纯粹作为前端的项目,然后我决定在后端使用它)。

我已经相应地投票支持

对字符串调用.ToString()以更改其格式

Resx文件不是配置文件。它们用于存储静态资源,如本地化字符串、图像等

您可能想要的是一个Setting,它位于Visual Studio属性的两个选项卡下方。在那里,您可以定义一个应用程序范围的设置,该设置类型为int,它将生成一个强类型访问器。无需解析*。

Properties.Settings.Default.MyInt.ToString("0#,##0");

以下是关于这个主题的更多信息:在C#中使用设置。

*从技术上讲,它仍然会被解析,但.NET会帮你解析

只需克隆一个en-US区域性(使用$作为CurrencySymbol),将其CurrencyDecimalDigits设置为0,并使用"C"格式说明符和将区域性克隆为;

int i = 5000;
var clone = (CultureInfo)CultureInfo.GetCultureInfo("en-US").Clone();
clone.NumberFormat.CurrencyDecimalDigits = 0;
Console.WriteLine(i.ToString("C", clone)); // $5,000

EDIT:看起来您首先有一个字符串"5000",您需要首先用int.Parse将其解析为int,然后可以使用该整数值生成特定格式的字符串。

int i = int.Parse("5000");
...
...

简单的答案是:不,没有更好的方法

答案很长:

  1. 您可以解析字符串并将其转换,但这可能比仅转换为int,然后返回到带格式的字符串更糟糕。

  2. 您可以直接将资源中的值存储为整数,而不是字符串。设计器不允许您直接执行此操作,但您可以使用文本编辑器打开.resx文件(或者在Visual Studio中,右键单击它Open With并选择XML Text Editor),然后在正确的部分添加资源,如下所示:

    <data name="MaximumSpend" xml:space="preserve" type="System.Int32, mscorlib">
       <value>5000</value>
    </data>
    

    之后,你可以在普通的资源编辑器上查看它(你会在Other部分看到你的值。你甚至可以编辑它,只是不"添加更多")

或者:

  1. 使用设置文件,而不是资源,这可能对此类数据更有意义

我认为从int改回string可能是最好的方法。例如:

string strIntString = strMaxSpend.Split("-").Trim();
int nValue;
if (!Int32.TryParse(strIntString, out nValue))
{
    //Parse failed
}

注意,我使用TryParse而不是直接的Convert调用,以防转换失败,这样我们就可以顺利失败。

然后只做问题中提到的ToString()部分。

试试这个:

string s = "2342314854";
string s1 = string.Format("{0:C}", Double.Parse(s));

结果为:$2,342,314,854.00

此代码将用于将字符串值转换为货币。