格式化不带逗号的小数

问题描述 投票:0回答:3

我尝试在 C# 中将小数格式设置为 0:0.0 尝试过这个代码

string nv = textBox7.Text.Trim().Replace(',', '.');

res =  Convert.ToDecimal(nv, new CultureInfo("en-GB"));

但 res 总是显示带有逗号的结果,也尝试过

new CultureInfo("en-GB")

但问题依然存在 提前谢谢你。

c# .net decimal
3个回答
20
投票

正如其他评论和答案所暗示的那样,您首先需要了解一些基础知识。我可能会说一些你已经知道的事情,但请耐心等待:

  1. 您的
    textBox7.Text
    包含
    string
    ,而不是
    decimal
  2. 如果您想要
    decimal
    进行计算,您必须将其转换(我认为您已经做到了这一点)
  3. 由于
    res
    是小数,因此每当您想查看其值时,都会将其转换为
    string
    。无论是将鼠标悬停在其上时将其写入
    Console
    还是调试器。该转换将使用您当前的区域设置。 就是为什么你总是看到逗号。
  4. 要将其显示给其他人或以您想要的格式将其写入某处,您必须指定格式或 CultureInfo。

a) 标准格式。示例:

Console.WriteLine(res.toString("F2"));

这将格式化 123456 小数点后 2 个数字:123456.00

b) 自定义格式。示例:

Console.WriteLine(res.toString("[##-##-##]"));

这将输出 123456 到类似 [12-34-56]

c) 文化信息。示例:

Console.WriteLine(res.ToString(CultureInfo.CreateSpecificCulture("nl-BE")));

这将输出 1234.56,就像在比利时一样:带有逗号 1234,56

顺便说一句,我认为 en-GB 也输出为逗号:-)

d)合并。发疯!两者都做!示例:

Console.WriteLine(res.ToString("F2", CultureInfo.CreateSpecificCulture("nl-BE")));

格式 123456 至 123456,00!

基于此,我建议如下:

decimal res = Convert.ToDecimal(textBox7.Text, new CultureInfo("en-GB"));

这假设您的用户使用逗号输入数字(因为 en-GB 小数点分隔符是逗号)。如果不是,请使用正确的 CultureInfo,例如 en-US 的 Invariant。


3
投票

res
是一个
decimal
,而不是字符串。所以它不能有格式。小数是没有关联格式的纯数学数字。仅当您将
decimal
转换为
string
时,该格式才会存在。

您可以使用

res.ToString(CultureInfo.InvariantCulture)
生成使用
.
作为小数点分隔符的字符串。


0
投票

这将为您提供不带逗号的小数数字,例如“15000.00”:

FormatNumber(nv, , , , 0)
© www.soinside.com 2019 - 2024. All rights reserved.