一个比较难解决的问题 求助高手

cp298674954 2010-09-16 03:18:40
最近在所公司的一个销售系统 经理说要考虑到数据库中的数据类型问题 比如公司现在的产品按个算 所以数量应该用整形 但是要考虑 以后可能会有按公斤算的产品 所以 现在数据库中的INT型字段以后要存成浮点型 希望有一个类 能存储这种数据 在数据类型发生变化的时候 引起软件尽可能小的变化


求解......
...全文
193 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cp298674954 的回复:]
引用 2 楼 lianshaohua 的回复:

改成float就行了;界面上再格式化吧或在业务层格式化;

你的意思就是 Class Product{ public int Price; } 当发生变化的时候 直接 改成 Class Product{ public float Price; } 然后把其他不符合的地方作修改?
[/Quote]
数据库和类中是float,但表现的是整型,没有问题吧?数据的内部形式和表现要分开的;
volunteergg 2010-09-16
  • 打赏
  • 举报
回复
可以用泛型的
ycg_893 2010-09-16
  • 打赏
  • 举报
回复
与数量或金额有关的字段最好不要float类型,因为它不是精确的类型,程序也不要用float类型,而是采用
sql numeric
C# decimal
cactus123456 2010-09-16
  • 打赏
  • 举报
回复
呵呵,和所谓懂技术的老板共事是最郁闷的了,因为天知道是他说的对还是你做的对。
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cactus123456 的回复:]

强烈建议先用int,以后出了foalt再说,不然程序员就要失业了
[/Quote]

哈哈 我也想这样 但是 老板会让我现在就失业的。。。。
cactus123456 2010-09-16
  • 打赏
  • 举报
回复
强烈建议先用int,以后出了foalt再说,不然程序员就要失业了
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 a312983516 的回复:]

引用 6 楼 cp298674954 的回复:
引用 5 楼 porschev 的回复:

数据库用浮点的就是了。。。具体要用的时候再去转化

你的想法是 最开始就是用Float 然后 在用的时候转化成 int? 因为要数据验证啊 之前他是整形的时候 出现 浮点数 是不符合业务逻辑的

你说的数据验证是怎么验证 验证是否为整形? 照我说可以用方法重载啊 多简单 INT一个方法 浮点……
[/Quote]

那要是 有一天 又出现了 Long Double 然后 一个个重载?
a312983516 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cp298674954 的回复:]
引用 5 楼 porschev 的回复:

数据库用浮点的就是了。。。具体要用的时候再去转化

你的想法是 最开始就是用Float 然后 在用的时候转化成 int? 因为要数据验证啊 之前他是整形的时候 出现 浮点数 是不符合业务逻辑的
[/Quote]
你说的数据验证是怎么验证 验证是否为整形? 照我说可以用方法重载啊 多简单 INT一个方法 浮点一个方法
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 linux7985 的回复:]

直接用整型就可以了,如果到到时候要换成公斤的时候,你可以把小数乘100变成整数也是可以存储的嘛
[/Quote]

那以前的数据呢 中等的表里 就有 10W行左右数据 表和表之前还有别的关系 还有无数的存储过程。。。。
烈火蜓蜻 2010-09-16
  • 打赏
  • 举报
回复
直接用整型就可以了,如果到到时候要换成公斤的时候,你可以把小数乘100变成整数也是可以存储的嘛
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
没办法的情况下写出了这样的类
public class BigNumber
{
protected double value = 0;

public virtual double Value
{
get { return value; }
set { this.value = value; }
}


protected BigNumber()
: this(0)
{ }

protected BigNumber(double o)
{
Value = o;
}


public static BigNumber operator +(BigNumber a, BigNumber b)
{
BigNumber reVal = new BigNumber(a.Value + b.Value);
return reVal;
}

public static BigNumber operator -(BigNumber a, BigNumber b)
{
BigNumber reVal = new BigNumber(a.Value - b.Value);
return reVal;
}

public static BigNumber operator *(BigNumber a, BigNumber b)
{
BigNumber reVal = new BigNumber(a.Value * b.Value);
return reVal;
}

public static BigNumber operator /(BigNumber a, BigNumber b)
{
BigNumber reVal = new BigNumber(a.Value / b.Value);
return reVal;
}

public static bool operator ==(BigNumber a, BigNumber b)
{
return a.Value == b.Value;
}

public static bool operator !=(BigNumber a, BigNumber b)
{
return !(a == b);
}

public override bool Equals(object obj)
{
if (!(obj is BigNumber))
{
return false;
}
BigNumber productQuantity = (BigNumber)obj;
return productQuantity.Value.Equals(this.Value);
}

public override string ToString()
{
return Value.ToString();
}

public override int GetHashCode()
{
return Value.GetHashCode();
}

}


-------------------------------------------------------------------------------------


public class VolumeNumber : BigNumber
{
public VolumeNumber() : base(0) { }
public VolumeNumber(double val) : base(val) { }

public override double Value
{
get
{
return (double)(int)this.value;
}
set
{
this.value = (int)value;

if (this.value!=value)
{
throw new FormatException("VolumeNumber类型只可以存储double类型");
}
}
}
}
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyq11 的回复:]

SQL SERVER numeric类型
decimal
[/Quote]

其实我也想这样 但是老板给我的意思是 要让数据库的类型和软件中的自定义类 降耦合
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
可不可以用自定义类的方法去实现
wuyq11 2010-09-16
  • 打赏
  • 举报
回复
SQL SERVER numeric类型
decimal
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 porschev 的回复:]

数据库用浮点的就是了。。。具体要用的时候再去转化
[/Quote]
你的想法是 最开始就是用Float 然后 在用的时候转化成 int? 因为要数据验证啊 之前他是整形的时候 出现 浮点数 是不符合业务逻辑的
porschev 2010-09-16
  • 打赏
  • 举报
回复
数据库用浮点的就是了。。。具体要用的时候再去转化
zhanghe100 2010-09-16
  • 打赏
  • 举报
回复
楼上的对
cp298674954 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lianshaohua 的回复:]

改成float就行了;界面上再格式化吧或在业务层格式化;
[/Quote]
你的意思就是 Class Product{ public int Price; } 当发生变化的时候 直接 改成 Class Product{ public float Price; } 然后把其他不符合的地方作修改?
ztenv 2010-09-16
  • 打赏
  • 举报
回复
改成float就行了;界面上再格式化吧或在业务层格式化;
sardineany 2010-09-16
  • 打赏
  • 举报
回复
路过,帮顶。。。。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧