C#关于小数计算的问题,要求输出保留真确的两位小数,要求在下面代码修改,大侠,谢谢了~没分了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*题目描述
下面是一个图书的单价表:计算概论 28.9 元/本数据结构与算法 32.7 元/本数字逻辑 45.6元/本C++程序设计教程 78 元/本
* 人工智能 35 元/本计算机体系结构 86.2 元/本编译原理 27.8元/本操作系统 43 元/本计算机网络 56 元/本JAVA程序设计 65 元/本
* 给定每种图书购买的数量,编程计算应付的总费用。
输入
输入第一行包含一个正整数k(0<k<100),表示有k组测试数据;接下来k行,每行包含一组测试数据。每组测试数据包含10个整数
* (大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、
* 《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
输出
对于每组测试数据,输出一行。该行包含一个浮点数f,表示应付的总费用。精确到小数点后两位。*/
namespace 计算书费
{
class Program
{
static void Main(string[] args)
{
int rs;
float sum = 0f;
//string value;
Console.Write("购买人数:");

rs = Convert.ToInt32(Console.ReadLine());
float [] arraysf = new float[10] {28.9f, 32.6f, 45.6f, 78.0f, 35.8f, 86.2f, 27.8f, 43.3f, 56.0f, 65.0f };
int[] sl = new int[10];

for (int j = 1; j <= rs; j++)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("输入书本数量:");
sl[i] = Convert.ToInt32(Console.ReadLine());
sum = sl[i] * arraysf[i];
Console.WriteLine("\n价格:{0}\n ", sum);
sum += sum;
}
Console.WriteLine("第{0}位客户,总共应付:{1}",j,sum);
}
Console.ReadKey();
}
}
}
回答问题的各位大侠,麻烦你们跑一下在给我结果啊.....错的 结果就不要给我了啊
呃...我自己解决了哈各位,加入int temp=0;temp=temp+sum;输出保留2位小数 就好了

第1个回答  2012-04-23
浮点数只是一个近似十进制数而已.... 用起来是有误差的

decimal sum=(decimal)0f;

后面的sum =(decimal) (sl[i] * arraysf[i]);

Console.WriteLine("第{0}位客户,总共应付:{1}",j,sum.Tostring("0.00"));追问

我刚开始就是用的这个 但是输出还是130.00,但是结果不是这个啊 是以.20结尾的才对啊

追答

sum =(decimal) ((float) sl[i] * arraysf[i]);

第2个回答  2012-05-03
float好像不能保存2位.
你把所有float类型的改成double

参考资料:.

第3个回答  2012-04-23

总共应付:{1}
改为
总共应付:{1:f2}追问

能实现130.00,但是结果不对啊..结果应该是.20的值啊

追答

将以下三行
sum = sl[i] * arraysf[i];
Console.WriteLine("\n价格:{0}\n ", sum);
sum += sum;
改为
Console.WriteLine("\n价格:{0}\n ", sl[i] * arraysf[i]);
sum += sl[i] * arraysf[i];
你再试试,结果对了吧,知道原因了吗

第4个回答  2012-04-23
tostring("2F")
第5个回答  2012-04-23
使用 xxx.Tostring("#.##");追问

value = sum.ToString("f"); 你说的是这样的么?上面代码结果是130.00,但是实际结果不是那么多,我不知道错在哪里

C#关于小数计算的问题,要求输出保留真确的两位小数,要求在下面代码修改...
Console.WriteLine("第{0}位客户,总共应付:{1}",j,sum.Tostring("0.00"));

C# 监测其他程序文本框内输入的字符,如果输入小数点则自动在后面添加两...
第一个IF语句是 如果输入的最后一个字符是小数点,那自动加上"00"if (txt1.Text.Contains(".")) { txt1.Text=txt1.Text.Replace(".", ".00"); } 第二个IF语句判断是否包含小数点,如果包含,则把小数点换成".00"要得是这个意思么?我觉得你要输入的是数字...那是不是限定一下必须只能...

用C#语言编程,十进制带两位小数,要转换成十六进制数,程序怎么写?
} 打印出来后就是 3E28 ,就是15912,在界面编程上再除以100就行了

求一个很基础的c#代码!!万分感谢!!!
2.利用C#对“动态语言”的支持。也就是说,将654*6+65-27\/654整个字符串当做一个string类型参数传入某一方法 然后返回执行后的结果,相信这个应该很适合你,下面是一个类,你直接用以下方法调用即可:如: public class ProgramTest { static void Main(string[] args) { string res = string.Empty; string error...

请教大侠如何在c#中将NumericUpDown控件在手动输入时、只允许输入一位...
对一个控件,你要充分熟悉其所有的属性和自有的功能,而不是盲目的去造轮子。NumericUpDown控件本身就支持控制小数位数的,NumericUpDown控件有个属性,叫 DecimalPlaces,是控制小数位数的,默认是0,你设置为1,就是一位小数了。

c#,在数据库中取出来的值ds.Tables[0].Rows[0][0].ToString(),如何四...
n1:保留一位小数 首先写一个方法用来转换decimal类型 public decimal ObjectToDecimal(object obj) { if (obj == null) return 0; if (obj == DBNull.Value) return 0; string text = obj.ToString(); decimal result = 0; if (decimal.TryParse(text, out result) == ...

C#中错误:非静态的字段、方法或属性“Student.show()”要求对象引用,怎 ...
从语法上而言,你可以将类的show方法加上static保留字定义成静态的,并把这个方法中引用的变类属性也定义成静态的,意思就是全天下学生都是一个名字(比如:御坂),年龄都是一个(0岁?),那就不必讨论哪个学生的报告问题,public class Student { \/\/姓名 public static string name;\/\/年龄 public...

我是菜鸟请问各位大侠c#控件常用的有哪些(具体点) 谢谢!
(1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text...

编写一个函数,输和一行字符,将此字符串中最长的单词输出
先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序. 二.学好C语言的四种程序结构 (1)顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句...

...C#、ASP.NET开发面试一般都会笔试和面试哪些题目,谢谢
答:代码后植。 21. 在.net中,配件的意思是? 答:程序集。(中间语言,源数据,资源,装配清单) 22. 常用的调用WebService的方法有哪些? 答:1.使用WSDL.exe命令行工具。 2.使用VS.NET中的Add Web Reference菜单选项 23. .net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域编号...

相似回答