c#将整数中的便士转换为英镑

c#将整数中的便士转换为英镑,c#,C#,我需要在数据库中存储物品的价格。我需要他们在整数和便士(例如100),但他们必须显示为英镑(1,00) 我试着用我的价格除以/100m如下: private int price; public int Price { get { return price/100m; } set { price = value; } } 但我有一个转换错误(无法从十进制转换为整数) 我必须使用int,因为我需要避免便士的分数。要执行整数除法,两个操作数都必须是整数类型。因此,删除100m中的十进制后缀m

我需要在数据库中存储物品的价格。我需要他们在整数和便士(例如100),但他们必须显示为英镑(1,00)

我试着用我的价格除以
/100m
如下:

private int price;
public int Price
{
  get { return price/100m; }
  set { price = value; }
}
但我有一个转换错误(无法从十进制转换为整数)


我必须使用int,因为我需要避免便士的分数。

要执行整数除法,两个操作数都必须是整数类型。因此,删除
100m
中的十进制后缀
m

private int price;
public int Price
{
    get { return price / 100; }
    set { price = value; }
}
更新-在下面的评论中,你突然说你想要一个字符串格式。这里是顺便说一句:

string formattedPounds = String.Format("£ {0:0.00}", Price);

我想你不需要整数除法。只需更改显示此int的方式

private int price;
private NumberFormatInfo info = new NumberFormatInfo
{
    NumberDecimalSeparator = ","
};

public int Price
{
  get { return price; }
  set { price = value; }
}

public string GetPrice
{
    get
    {
        return (Price / 100d).ToString("##.00", info);
    }
}

使用
GetPrice
属性来获取所需的值。

如果要将金额从便士转换为英镑、美分转换为美元或其他任何形式,则需要将金额转换为小数

private int priceInPence;
public decimal priceInPounds {
   get { return priceInPence / 100m; }
   set { priceInPence = (int)(value * 100); }
}


根据定义,整数可以是一个整数。没有小数点。是的,我知道int不能被划分,但我看到了使用
m
和integer的例子,它们是有效的。为什么不在这里?是否确实要返回int?如果你成功地完成了你要做的事情,你将截断(删除)便士。
m
是小数的后缀。你有任何你期望的输入和输出的例子吗?这听起来像是一个奇怪的情况,因为如果只删除分数部分,就会丢失数据?此外,属性通常是“获取您设置的内容”,如果开发人员使用您的
Price=100
,然后尝试使用
var whatever=Price
查看它,则预期与您输入的值相同。在任何情况下,int除以100都将得到0,但如果
Price
属性应该返回一个以磅为单位的数字,那么int是完全错误的数据类型,因为不是100的倍数的完全有效的便士数不会等于整数磅数。这里的整数除法不会降低精度吗?他要求将磅数降到数百(“1,00”)。如果必须使用整数,为什么不在显示结果时格式化?你的应用程序不会在意它是否格式化,这是你在向最终用户展示它时要处理的事情。拥有一个具有不同值语义的属性setter和getter是非常糟糕的。OP已经有了一个答案(基本相同),并接受了正确的答案。这个问题根本不应该被回答,而且肯定不是这样。我不知道使用字符串格式是否合适。我必须在数据库中插入我的值,列类型是number。@Koosshh56如果要将它们放入数据库中,则格式设置应该无关紧要。除非出于某种奇怪的原因,您要在int列中插入便士,或在decimal列中插入英镑。@juharr您能更好地解释一下吗?@Koosshh56 You's DB不关心格式。你所需要做的就是决定这个栏目是什么类型的,以及你是想在那个栏目里放便士还是英镑。使用十进制显示值是一种与存储数据无关的格式。最好将便士存储为整数,或将英镑存储为小数,这样就不会丢失分辨率。如果你将磅存储为整数,那么你不能准确地存储像155便士这样的东西,你必须存储1或2磅。@Koosshh56让我在这里非常清楚。格式化用于显示值。您是否担心显示或存储这些值?如果在int列中存储100,则必须从数据库中提取该值,然后使用类似
string.Format({0:C},value/100m)
的方法创建值“1,00”的格式化字符串表示形式。
using System;
using System.Collections.Specialized;

public class Program
{
    public static void Main()
    {

        NameValueCollection nvcFormVariables = new NameValueCollection();
        nvcFormVariables.Add("Amount","1356");

        //string sAmount = "13.56";
        int amount = int.Parse(nvcFormVariables["Amount"]);     
        Console.WriteLine(amount);
        decimal amountPaid = amount / 100;      
        Console.WriteLine(amountPaid);

        decimal dAmount = decimal.Parse(nvcFormVariables["Amount"]);
        Console.WriteLine(dAmount);
        decimal dAmountPaid = dAmount / 100;        
        Console.WriteLine(dAmountPaid);

    }
}