舍入到某个小数位
回答
回合double
本身喜欢:
Math.Round(0.83333, 2, MidpointRounding.AwayFromZero);
(你应该定义MidpointRounding.AwayAwayFromZero才能得到正确的结果默认此函数使用银行家四舍五入阅读更多关于银行家四舍五入:。http://www.xbeat.net/vbspeed/i_BankersRounding.htm所以你可以看到为什么这个不会给你正确的结果)
或只为两位小数的显示值:
myDouble.ToString("F");
或供的#
myDouble.ToString("#.##")
默认值是MidPointRounding.ToEven。这与IEEE标准确认。因此它应该被单独留下,即默认值。 –
@MilindThakkar它取决于应用程序 - 我看到一家公司拥有自己的计费系统,需要针对不同的供应商提供不同的舍入方案。无论哪种舍入方法*都可以正确,但这是邓肯知道并选择的方法。 –
它不是*显示*值,并将在0.857失败,将返回0.86和*不* 0.85按OP所要求的: – Tigran
数量确定的任何小数你说显示为 - 所以这将是:
var d = value.ToString("f2");
见Standard numeric format strings
如果你真的要调整值降低到2dp,那么你可以做@middelpat建议的。
double d = 0.833333333333333333;
Math.Round(d, 2).ToString();
这并不总是正确的。看看银行家的四舍五入:http://www.xbeat.net/vbspeed/i_BankersRounding.htm您应该指定第三个参数MidpointRounding.AwayFromZero – middelpat
@middelpat:标准的方法是.toEven,这是按照IEEE标准是正确的。投票不是理由。 –
尝试
decimalVar = 0.833333333333333333;
decimalVar.ToString ("#.##");
如果你想看到0.85781..
为0.85
,最简单的方法是通过100
倍增,由100
转换为int
和鸿沟。
int val = (int)(0.833333333333333333 * 100);
var result = val /100;
它应该产生你正在寻找的结果。
@dowvoter:原因? – Tigran
- 1. c舍入到2位小数位#
- 2. 舍入小数位数
- 3. 将数字舍入到小数位
- 4. 舍入到小数点后一位?
- 5. 在Javascript中舍入到2位小数
- 6. 舍入到小数点后两位
- 7. JS舍入到2位小数
- 8. 向下舍入到一位小数
- 9. T-SQL舍入到小数位
- 10. Java的舍入到两位小数
- 11. SQL - 舍入到2位小数
- 12. Fortran - 要舍入到小数点一位
- 13. SQL从小数点后3位舍入到2位小数
- 14. 关于舍入一个值到某个小数点
- 15. 将小数点后的位数删除到某些数字而不舍入
- 16. 四舍五入到下一个数保留两位小数
- 17. NHibernate 3.0将小数舍入到5位小数 - 为什么?
- 18. 四舍五入到小数点后两位小数
- 19. 在SQL中将浮点数舍入到2位小数位
- 20. 四舍五入到两个小数点
- 21. 在C中舍入到十五个小数位以上#
- 22. MS Access四舍五入SQL小数位
- 23. 舍入至少2至4位小数
- 24. 如何取整或舍入小数位?
- 25. 索引小数位的舍入
- 26. 四舍五入高达9位小数
- 27. python下舍入为2位小数
- 28. 如何在C++中舍入小数位?
- 29. 在hibernate查询语言中舍入到2位小数位
- 30. BigDecimal舍入到2个小数位,然后到一个有效数字
use string.Format – Zaki
你想得到一个双或字符串? – 888