c# – 通过整数进行分数计数

c# – 通过整数进行分数计数,第1张

概述我收到一个整数,表示小数面额的美元金额.我想要一种算法,可以添加这些数字而无需解析并将它们转换为双精度或小数. 例如,我收到整数50155,这意味着50和15.5 / 32美元.然后我收到10210,即10和21/32美元.所以50 15.5 / 32 10 21/32 = 61 4.5 / 32,因此: 50155 10210 = 61045 我想再次避免这种情况: int a = 50155; 我收到一个整数,表示小数面额的美元金额.我想要一种算法,可以添加这些数字而无需解析并将它们转换为双精度或小数.

例如,我收到整数50155,这意味着50和15.5 / 32美元.然后我收到10210,即10和21/32美元.所以50 15.5 / 32 10 21/32 = 61 4.5 / 32,因此:

50155 10210 = 61045

我想再次避免这种情况:

int a = 50155;int b = a / 1000;float c = a % 1000;float d = b;d += c / 320f;// d = 50.484375

我更喜欢这个:

int a = 50155;int b = 10210;int c = MyClass.Add(a.b); // c = 61045...public int Add(int a,int b){    // ?????}

在此先感谢您的帮助!

解决方法 好吧,我不认为你需要使用浮点…
public static int Add(int a,int b){    int firstWhole = a / 1000;    int seconDWhole = b / 1000;    int firstFraction = a % 1000;     int secondFraction = b % 1000;    int totalFraction = firstFraction + secondFraction;    int totalWhole = firstWhole + seconDWhole + (totalFraction / 320);    return totalWhole * 1000 + (totalFraction % 320);}

或者,您可能希望创建一个可以转换为整数格式的自定义结构,并重载运算符.这将允许您编写更易读的代码,这些代码不会意外地导致其他整数被视为这种略微奇怪的格式.

编辑:如果你被迫坚持使用“单整数”格式,但要稍微调整一下你可能要考虑使用512而不是1000.这样你可以使用简单的掩码和移位:

public static int Add(int a,int b){    int firstWhole = a >> 9;    int seconDWhole = b >> 9;    int firstFraction = a & 0x1ff    int secondFraction = b & 0x1ff;    int totalFraction = firstFraction + secondFraction;    int totalWhole = firstWhole + seconDWhole + (totalFraction / 320);    return (totalWhole << 9) + (totalFraction % 320);}

仍然有320的混乱,但它至少有点好.

总结

以上是内存溢出为你收集整理的c# – 通过整数进行分数计数全部内容,希望文章能够帮你解决c# – 通过整数进行分数计数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存