- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个库存软件,同时也在按百分比和金额计算折扣。
我用来转换价格的代码是这样的:
if(txtDiscount.Text == "" || txtGrandTotal.Text == "")
{
MessageBox.Show("Please Enter amount in Grand Total",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
// double percent;
double grandTotal;
double per;
double txDiscount;
//percent = Convert.ToInt32(txtPercant.Text);
grandTotal = Convert.ToInt32(txtGrandTotal.Text);
txDiscount = Convert.ToInt32(txtDiscount.Text);
per = txDiscount / grandTotal * 100;
//per = percent / 100 * grandTotal;
if (per % 3 != 0)
per = (per - per % 3) + 3;
txtPercant.Text = Convert.ToString(per);
................
................
................
................
................
现在让我们假设如果我输入的金额是“25”,那么它计算的百分比是“2.77777777777778”。我想将其限制为点后三位小数,就像我想成为“2.778”或任何我想在点后仅显示三位小数的方式,任何人都可以帮助我以哪种方式做到这一点?任何建议将不胜感激!!
从价格到 % 代码的转换是:
private void txtDiscount_Leave(object sender, EventArgs e)
{
if(txtDiscount.Text == "" || txtGrandTotal.Text == "")
{
MessageBox.Show("Please Enter amount in Grand Total",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
// double percent;
double grandTotal;
double per;
double txDiscount;
//percent = Convert.ToInt32(txtPercant.Text);
grandTotal = Convert.ToInt32(txtGrandTotal.Text);
txDiscount = Convert.ToInt32(txtDiscount.Text);
per = txDiscount / grandTotal * 100;
//per = Math.Round(per, 3);
per = Math.Truncate(per * 1000) / 1000;
txtPercant.Text = Convert.ToString(per);
double lblgrandTotal = 0.0;
double Disconunt = 0.0;
double netTotal = 0.0;
lblgrandTotal = Convert.ToDouble(txtGrandTotal.Text);
Disconunt = Convert.ToDouble(txtDiscount.Text);
netTotal = grandTotal - Disconunt;
//netTotal = Convert.ToInt32(grandTotal) - Convert.ToInt32(Discount);
lblNetTotal.Text = Convert.ToString(netTotal);
}
}
从 % 到价格代码的 Cobersion 是:
private void textBox1_Leave(object sender, EventArgs e)
{
if (txtPercant.Text == "")
{
MessageBox.Show("Please Enter value in Percenent", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
double percent;
double grandTotal;
double per;
percent = Convert.ToDouble(txtPercant.Text);
grandTotal = Convert.ToDouble(txtGrandTotal.Text);
per = percent / 100 * grandTotal;
txtDiscount.Text = Convert.ToString(per);
double lblgrandTotal = 0.0;
double Disconunt = 0.0;
double netTotal = 0.0;
lblgrandTotal = Convert.ToDouble(txtGrandTotal.Text);
Disconunt = Convert.ToDouble(txtDiscount.Text);
netTotal = grandTotal - Disconunt;
//netTotal = Convert.ToInt32(grandTotal) - Convert.ToInt32(Discount);
lblNetTotal.Text = Convert.ToString(netTotal);
}
}
但我面临的问题是我将 % 转换为价格和 Vise Versa,现在如果我在价格中添加 12,它表示 12.33%,当我输入 12.33% 时,它会转换回 11.997Price,但不是应该是一样的...应该是 12 而不是 11.997...真的很困惑..!!
按价格我的意思是我正在计算总计的折扣百分比和价格折扣,意味着如果我添加 12% 然后它计算总计的价格折扣如果我输入价格金额然后它计算总计的折扣百分比总计
最佳答案
Math.Round(per, 3)
但是,您的方法有两个逻辑错误。您正在使用 double
来处理金额和应用于它的百分比。
double
适用于现实世界中的自然事物,例如 Nose 的长度,或者名人被捕与有关它的笑话出现在 Twitter 之间的秒数。
金钱和百分比折扣不是自然的东西,而是基于特定编号系统的人为金额。
除了毛里塔尼亚乌吉亚、马达加斯加阿里亚斯和马耳他斯库多,以及一些过时的货币(如旧英镑、先令和便士),几乎所有这些货币都是基于小数的。在当前使用的三个中,前两个基于 5 进制(因此在十进制系统中可以毫无错误地表示),最后一个与欧元 Hook ,因此无需担心。
现在,当我们处理现实世界时,我们会遇到问题,因为我们的编号系统是在一个特定的基础上,所以我们得到像 0.33333333333333333333333333333
这样的结果。
有了钱,我们只能用除法来犯这些错误,因为除非我们除法,否则没有什么会迫使我们犯下基本限制错误。
但是 double
内部不使用十进制,它使用二进制。二进制有不同的数字,导致点后的循环数字。例如。 0.1
和 0.01
。大多数情况下,所涉及的舍入误差会抵消,但有时不会。
因此,在处理金钱时,请始终使用 decimal
而不是 double
除非你有很好的理由(如果你不能解释为什么上面没有' t 适用于您的情况,则您不适用)。
第二个问题是,因为你在做百分比,所以你在做除法,所以你仍然会得到一些舍入误差。
解决方案是多存储一位小数位。例如。如果您想精确到小数点后 3 位(如您所说),则存储 4。
例如,如果在某个时候我们将 12 除以 7 并四舍五入为三分,我们将得到 1.714。如果我们再次乘以 7,我们将得到 11.998。然而,如果我们存储了四位小数 1.7143 并且只显示 1.714,那么再次乘以 7 将得到 12.0001,我们将显示(再次四舍五入到 3 位)为 12。
我们无法避免舍入误差,但我们可以在更高的精度下工作,直到需要的最后一刻,因此舍入误差本身会丢失到舍入中。
关于c# - 如何将值四舍五入到小数点后三位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355132/
我有这个“科学应用程序”,其中 Single 值在显示在 UI 中之前应该四舍五入。根据this MSDN article ,由于“精度损失”,Math.Round(Double, Int32) 方法
这个问题类似于Chrome 37 calc rounding 但实际问题有点复杂,提供的解决方案不适用于这种情况: #outerDiv, #leftDiv, #middleDiv, #rightDiv
假设有一堆从 pnorm() 返回的数据,这样您就有了 .0003ish 和 .9999ish 之间的数字。 numbers <- round(rnorm(n = 10000, mean =
我想有效地将unsigneda整数除以2的任意幂,然后取整。所以我在数学上想要的是ceiling(p/q)0。在C语言中,不利用q受限域的Strawman实现可能类似于以下function1: /
我正在尝试获取 #value_box 的值以显示 100.5 但它一直在向上舍入。有谁知道我可以做些什么来让它显示小数位? jsfiddle //returns 101 $("#value_box
我有一段 JavaScript 代码 shipingcostnumber * parseInt(tax) / 100 + shipingcostnumber 返回数字为6655.866558,因此我将
我有一个关于 PostgreSQL 9.2 中 float 的新手问题。 是否有直接舍入 float 的函数,即不必先将数字转换为数字类型? 另外,我想知道是否有一个函数可以按任意度量单位舍入,例如最
这个问题已经有答案了: Rounding to nearest 100 (7 个回答) 已关闭10 年前。 我正在尝试将数字四舍五入到 100。 示例: 1340 should become 1400
我试图找出使用整数存储在列表中的其他两个数字之间的任何n在整数列表中找到最接近的值ROUNDED DOWN的最佳方法。在这种情况下,所有整数都将始终是无符号的,以防万一。 假设如下: 列表始终从0开始
我想将一个 BigDecimal 四舍五入到小数点后两位,但是当使用 round 方法时,它似乎没有双舍入: BigDecimal.new('43382.0249').round(2).to_s('F
我正在使用格式如下的财务数据进行计算: . 基本上,在我的程序中我遇到了一个浮点错误。例如,如果我有: 11.09 - (11.09 * 0.005) = 11.03455 我希望能够使用 11.03
有整型变量,电压单位为毫伏。 signed int voltage_mv = 134; //134mV 我有 2 段显示,我想显示百分之一伏特。 如何在一次操作中将毫伏转换为百分之一伏?没有 IF 语
这是我将数字四舍五入到两位小数的函数,但是当四舍五入的数字为 1.50 时,它似乎忽略尾随零并只返回 1.5 public static double roundOff(double number)
您好,我在将数字四舍五入到 -0 而不是 0 时遇到了问题 代码: 输出:-0 预期输出:0 我一直在寻找任何解决方案,但没有找到。 请解释并帮助我为什么它四舍五入为 -0 而不是 0?谢谢 最佳答
我正在使用 Java 的 Random 生成随机数:1.0、1.1 - 10 Random random = new Random(); return (double) ((random.nextIn
基本上,我有一个数字: 我基本上想做一些数学运算来创建这个数字 80。 如果数字是 62.7777777778,则数字将为 60。 我希望数字像这样四舍五入: 20, 40, 60, 80, 100
我希望显示来自 NSDate 对象的月数。 //Make Date Six Months In The Future NSCalendar *calendar = [[NSCalendar alloc
下面是一些小代码来说明我所看到的 float floater = 59.999f; DecimalFormat df = new DecimalFormat("00.0"); System.out.p
我现在开始使用 android 和 java,但遇到了问题。 I have a result x = 206.0548. And y = 206, both of type double How do
我有一个 ruby 散列数组,其中包含两个键,'tier' 和 'price'。对于给定的价格,我想退回等级。 这对于精确匹配来说已经足够简单了,但是我如何通过将我的输入值四舍五入到数组中的下一个
我是一名优秀的程序员,十分优秀!