从十进制值
回答
string.Format("{0:0.#####}", 0.0030)
或
var money=1.3000m;
money.ToString("0.#####");
以供将来参考我由约翰·希恩建议.NET Format String Quick Reference。
嗯,这是一个显示格式问题(将十进制转换为字符串时添加了零)。
您需要查看代码中您看到尾部零的位置。是否在调用.ToString()之后?尝试使用不同的格式化字符串:
.ToString("#");
.ToString("0.00");
.ToString("#.##");
依此类推。做到这一点的最好方法就是试验不同的可能值。
decimal m = 0.030000m;
Console.Write(m.ToString("0.##########"));
只要确保你有你想要显示
decimal value = 0.0030m;
value.ToString(“G29″);
编辑小数位的数量足够#秒:对于g格式不工作,唯一的问题是,它跳到科学记数法如果原始小数中有太多有效数字。不太理想。
见 “将军(” G “)格式说明” 文件位置:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString
我在吃午饭,所以我做了一个小测试:
decimal d1 = 0.000100m;
decimal d2 = 0.001000000000000000000000m;
decimal d3 = 0.000000000000001000000000m;
Console.WriteLine(Environment.NewLine + "input decimal: 0.000100m");
Console.WriteLine("G " + d1.ToString("G"));
Console.WriteLine("G29 " + d1.ToString("G29"));
Console.WriteLine("0.####### " + d1.ToString("0.#######"));
Console.WriteLine(Environment.NewLine + "input decimal: 0.001000000000000000000000m");
Console.WriteLine("G " + d2.ToString("G"));
Console.WriteLine("G29 " + d2.ToString("G29"));
Console.WriteLine("0.####### " + d2.ToString("0.#######"));
Console.WriteLine(Environment.NewLine + "input decimal: 0.000000000000001000000000m");
Console.WriteLine("G " + d3.ToString("G"));
Console.WriteLine("G29 " + d3.ToString("G29"));
Console.WriteLine("0.####### " + d3.ToString("0.#######"));
输出:
input decimal: 0.000100m
G 0.000100
G29 0.0001
0.####### 0.0001
input decimal: 0.001000000000000000000000m
G 0.001000000000000000000000
G29 0.001
0.####### 0.001
input decimal: 0.000000000000001000000000m
G 0.000000000000001000000000
G29 1E-15
0.####### 0
我使用以下内容。它确保任何十进制数(最大精度为29位小数)将显示所有可用的精度数字,而不会拖尾零,并且不需要您的代码需要一长串丑陋的散列标记。
if (value is Decimal)
value = ((Decimal)value).ToString("0.".PadRight(29, '#'), culture);
public static string GentlyRemoveEndZeros(string input)
{
// if (input == null) return null;
// if (input == "") return "";
if (input.Contains(".")) return input.TrimEnd('0').TrimEnd('.');
return input;
}
其他不使用“。”的语言环境如何? – 2014-07-11 09:09:05
@MartinMulder同样的方法:if(input.Contains(“,”))return input.TrimEnd('0')。TrimEnd(','); – VovaM 2016-10-27 04:38:35
@VovaN:的确如此,但是您的答案不能跨文化证明? – 2016-11-03 09:01:08
截断尾随零是非常容易,用双工铸造解决:
decimal mydecimal = decimal.Parse("1,45000000"); //(I)
decimal truncate = (decimal)(double)mydecimal; //(II)
(I) - >分析十进制值来自任何字符串源。
(二) - >第一:抛出加倍这删除尾随零。第二:其他投到小数,因为不存在从十进制隐式转换为双和反之亦然a)
您将假设所有的值都适合小数点,可以放入双倍数。这可能会导致OverflowException。你也可能会失去精确性。 – 2014-07-11 09:10:23
你认为是错误的,你的评论没有增加任何讨论。很明显,这里所有的都假设该值可以适用于双精度值和十进制值。这里,溢出不是问题。 Regards !! – amedriveroperez 2014-07-11 17:14:01
还有谁假设?我搜索了'双'......没有其他人假设这一点。 – 2014-07-12 10:13:00
- 1. 从十六进制值
- 2. 十进制值
- 3. 十进制值/ SQL
- 4. 十六进制值
- 5. 双十进制值
- 6. mysqli从分贝拉十进制值
- 7. 从XML获取十进制值
- 8. 读取mp3十进制值
- 9. 解释十六进制值?
- 10. 存储十六进制值
- 11. Xamarin.Forms.Color到十六进制值
- 12. 十六进制值在Android
- 13. 验证十进制值
- 14. 插入十六进制值
- 15. JavaScript十进制值验证
- 16. 允许十进制值Selection.Find.Font.Position
- 17. 含十进制值的SeekBar
- 18. 循环十进制值
- 19. 防止值十进制数
- 20. XML xs:int十六进制值
- 21. Fomating十进制值JavaScript
- 22. 返回十进制值
- 23. MySQLIMPORT十六进制值
- 24. 不能SELECT十进制值
- 25. 问题在十进制值
- 26. 价值为十六进制
- 27. XML模式,十进制值
- 28. NSNumber和十进制值
- 29. Qt Json十进制值
- 30. 从六进制十进制值转换为字符串
是的,但如果你可能有6位小数或7?你最终会出现一个投机性的丑陋的#字符。 – 2010-01-21 13:47:31
这会将数字舍入到最接近的万分之一。这可能或不可能是OP想要的。 – 2010-01-21 13:57:33
@ andrew-m是#是一个数字占位符。在大多数情况下,你知道想要的精度是多少。如果你不想并且想要绝对确定你可以使用你当前使用的数据类型的全部精度。 “小数”可以保存28-29个有效数字。 Hacky解决方案:'.ToString(“0。”。PadRight(29,'#'))' – 2010-01-21 14:47:51