postgresql 小数问题以及它们在.NET中的表示方式

m0rkklqb  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(187)

我试图添加一个价格列到我的ASP.NET Crud,它的作品。唯一的问题,我有是,它是采取错误的输入。我是一个初学者,所以我必须忽略的东西,但无论如何,我插入一个值,如15.50,它成为1.550
enter image description hereenter image description here的数据库
这里有一些代码片段,我不知道我在这里搞砸了什么。namespace CRUDNet.

{
    [Table("Produtos")]
    public class Produto
    {
        [Column("ID")]
        [Display(Name = "ID")]
        public int ID { get; set; }
        [Column("Nome")]
        [Display(Name = "Nome")]
        public string Nome { get; set; }
        [Column("Valor")]
        [Display(Name = "Valor")]
        [DisplayFormat(DataFormatString = "{0:C}")]
        public decimal Valor { get; set; }
    }
}

字符串
我希望当我插入一个值,如15.50,我得到15.50,而不是1.550

fjaof16o

fjaof16o1#

看起来你的本地小数和分组分隔符不是你认为的那样,分组分隔符是一个句号(.),并且被忽略,因为它与解析数字无关。

var s = "15.50";

    // en-gb uses a period/full stop as the decimal separator.
    var periodCulture = CultureInfo.CreateSpecificCulture("en-gb");
    Console.WriteLine($"{Decimal.Parse(s, periodCulture):N}");
    // 15.50

    // Using de-de as it use a comma as the decimal separator.
    var commaCulture = CultureInfo.CreateSpecificCulture("de-de");
    Console.WriteLine($"{ Decimal.Parse(s, commaCulture):N}");
    // 1,550.00

字符串
我当前的文化是en-gb,它使用句点作为小数点分隔符,逗号作为分组分隔符。

yqyhoc1h

yqyhoc1h2#

您的应用程序中15.50转换为1.550的问题似乎与Produto类中Valor字段的格式有关,也可能与应用程序的区域性设置如何解释十进制数有关。
在代码中,[DisplayFormat(DataFormat String =“{0:C}”)]设置为将Valor格式化为货币,这可能会因应用程序的区域性设置而异。如果应用程序使用的区域性中逗号是小数点分隔符,则它可能会将15.50显示为1.550。
1-检查区域性:1-1设置所需的区域性:您可以在应用程序的启动代码或控制器操作中执行此操作。

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");

字符串
2-更改格式字符串:尝试将DataString字符串更改为类似“{0:0.00}”的内容以获得更一致的格式。3-查看如何处理输入:确保在代码中将输入15.50正确解析为小数。
4-小提示:尝试暂时删除[DisplayFormat]属性以查看Valor的原始值,帮助您确定问题是与值的存储或显示有关。

pexxcrt2

pexxcrt23#

格式(F):{0:D}以十进制格式显示整数值。您可以指定位数。(尽管类型称为“decimal”,但数字的格式为整数。)
对于2个位置,请使用它,如DataString = {0:n2}

相关问题