【问题标题】:Retain decimal places in toString保留 toString 中的小数位
【发布时间】:2013-02-08 08:44:00
【问题描述】:

有没有办法让 'double.toString()' 的结果字符串包含双精度的确切值?

例如

double d = 123.0   ->   toString() will be "123"

我找到了一些使用自定义格式 .toString("#.0") 的解决方案,但如果我想添加更多小数位,我会回到我开始的地方

double d = 123.00   ->  toString("#.0") will be 123.0
double d = 123.0    -> toString("#.00") will be 123.00

我尝试这样做的原因是因为我有自定义文本框,必须使用与实际显示的值不同的值,并且当尝试在此文本框中输入您自己的值时,文本框会忽略您的尝试在小数位输入零时的文本。因此我需要toString 的值等于double 的确切值,这样才能正确输入这个数字。

谢谢

【问题讨论】:

    标签: c# winforms textbox rounding tostring


    【解决方案1】:

    有没有办法让 'double.toString()' 的结果字符串包含双精度的确切值?

    确实包含 double 的确切值 - 但 double 不存储 123、123.0 和 123.00 之间的任何差异。

    decimal 存储差异,但是 - 如果您关心精确的十进制数字,则更合适。

    另一方面,听起来实际上你在错误的地方进行比较:

    我尝试这样做的原因是因为我有自定义文本框,必须使用与实际显示的值不同的值,并且当尝试在此文本框中输入您自己的值时,文本框会忽略您的尝试在小数位输入零时的文本。

    不要比较 字符串 值 - 解析值(到 decimaldouble)然后比较解析的值。

    这也将防止出现前导零的问题,其中“0123”和“123”表示相同的值,但是是不同的字符串。

    【讨论】:

    • 伙计,你很快 ;) 在 stackoverflow 上发帖是你的全职工作吗?
    • +1 获取最后一条信息。不知道十进制知道提供的位数之间的差异
    • @animaonline 他的全职工作甚至不涉及 C#
    • 感谢您的出色回答。我并没有尝试比较这些值,而是尝试将值写入文本框。虽然非常有用的见解! (编辑:更改为十进制解决的问题)
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2022-10-12
    • 2023-03-22
    • 2014-02-08
    • 2011-06-14
    相关资源
    最近更新 更多