【发布时间】:2014-03-27 22:02:27
【问题描述】:
对于我大学的一门课程,我需要编写一个将数字转换为 自然语言,例如如果用户输入“2.55”,程序输出“二点五五”。 我快要完成它了,我唯一不能得到的是点后的数字。 我不允许使用字符串。以下是我尝试获取小数位数的方法:
i=0;
while((wert - (long int)wert) != 0){
wert /= 10;
i++;
}
但它给了我示例数字“2.55”的小数点后 356 位的值。有没有不使用字符串计算小数位的方法?
最好的问候
【问题讨论】:
-
浮点不能那样工作......很难预测像“2.55”这样的数字将如何存储为双精度 - 你可能会得到像“2.549999......”这样的数字。选择一个固定的精度并坚持下去。
-
不要与零精确比较,而是尝试检查零和数字之间的差异是否非常小。
-
预期输入的数字范围是多少?它是 64 位系统的完整浮点范围吗?是否允许将输入解析为两个独立的整数?根据答案,您可能能够以不同的方式解析输入。
-
用他的话来说,该程序应该能够向您显示任何在 double 范围内的实数应该可以表示,例如“2.1”应该给出“两点一”,“2.10”应该给出“牵引点一零”。
-
您以什么格式接收您的输入?我假设您正在接收字符串,然后将它们转换为双精度数?为了正确解析“2.1”和“2.10”,您将不得不使用原始字符串或其他一些信息(如最大 sig-figs 数)......否则我理解它是不可能的。跨度>
标签: c++ floating-point double decimal